asp.ImageButton OnClick-Funktion in GridView in einem updatePanel

  • Ich habe eine GridView, die ständig mit einem Timer abgeglichen wird und sich in einem updatePanel befindet, sodass die Seite nicht kontinuierlich aktualisiert wird (jede Zeile verfügt über eine Countdown-Sequenz, sodass die GridView ständig aktualisiert werden muss)

    In der Rasteransicht gibt es eine Bildschaltfläche mit einer OnClick-Methode. Bevor die OnClick-Methode ausgelöst werden konnte, würde ich sicherstellen, dass sich die gridView nicht in einem UpdatePanel befindet und dass die Seitenaufrufdatenbindung der gridview in einem "If Not IsPostBack" war.

    Mit dem Timer kann ich jedoch nicht das gridview an ein "If Not IsPostBack" binden und es muss sich in einem UpdatePanel befinden.

    Gibt es eine Möglichkeit, ein UpdatePanel und zu verwenden "If Not IsPostBack" und trotzdem die OnClick-Methode aufgerufen werden?

    Vielen Dank

    Hier ist ein Teil des Codes, falls er mein ist Die Erklärung machte keinen Sinn:

    UpdatePanel / Timer / GridView

     <asp:UpdatePanel runat="server">
    <ContentTemplate>
    <asp:Timer ID="timerCountDown" runat="server" Interval="1000" OnTick="timerCountDown_Tick"></asp:Timer>
    <asp:GridView ID="gridBuildQueue" runat="server" AutoGenerateColumns="False"
                        GridLines="none" ShowFooter="false" ShowHeader="false" Width="100%">
                        <Columns>
                            <asp:TemplateField>
                                <ItemTemplate>
                                    <asp:ImageButton runat="server" ID="cmdCancelBuild" ImageUrl="~/images/cancel.jpg" OnClick="ImageButton_Click"/>
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
            </asp:GridView>
            </ContentTemplate>
    </asp:UpdatePanel>
     

    OnTick-Timer-Methode:

     Protected Sub timerCountdown_Tick(ByVal sender As Object, ByVal e As EventArgs)
        Me.gridBuildQueue.DataBind()
    End Sub
     

    ImageButton_Click-Methode (die derzeit nie aufgerufen wird):

     Protected Sub ImageButton_Click(ByVal sender As Object, ByVal e As ImageClickEventArgs)
        Dim imageButton As ImageButton = CType(sender, ImageButton)
        Dim row As GridViewRow = CType(imageButton.NamingContainer, GridViewRow)
        Dim button As ImageButton = DirectCast(row.FindControl("cmdCancelBuild"), ImageButton)
    etc...
    End Sub
     
    22 November 2011
    jdtaylor
1 answer
  • Sie müssen GridView Steuerungsereignisse verwenden, insbesondere - RowCommand.

     <asp:UpdatePanel runat="server">
       <ContentTemplate>
        <asp:GridView 
                 ID="gridBuildQueue" 
                 runat="server" 
                 AutoGenerateColumns="False"
                 GridLines="none" 
                 ShowFooter="false" 
                 ShowHeader="false" 
                 Width="100%"
                 onrowcommand="gridBuildQueue_RowCommand"
                 >
                   <Columns>
                    <asp:TemplateField>
                     <ItemTemplate>
                       <asp:ImageButton 
                                 runat="server" 
                                 ID="cmdCancelBuild" 
                                 ImageUrl="~/images/cancel.jpg" 
                                 CommandName="cmd"/>
                      </ItemTemplate>
                     </asp:TemplateField>
                   </Columns>
        </asp:GridView>
       </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="gridBuildQueue" EventName="RowCommand" />
            </Triggers>
        </asp:UpdatePanel>
     

    Code hinter:

     protected Sub gridBuildQueue_RowCommand(ByVal sender As Object,ByVal e as GridViewCommandEventArgs)
      if e.CommandName="cmd"  Then
    
       ....
      End If
    End sub
     

    Zusätzlich zum RowCommand-Ereignis müssen Sie AsyncPostBackTrigger für RowCommand hinzufügen Veranstaltung. (Legen Sie die UpdatePanel.Triggers-Auflistung fest.)

    DEMO:

    Markup

     <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
    </div>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:ImageButton ID="ImageButton1" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
            <asp:Timer ID="Timer1" runat="server" Interval="1000">
            </asp:Timer>
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="GridView1" EventName="RowCommand" />
            <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
        </Triggers>
    </asp:UpdatePanel>
     

    Code-Behind

     Dim lst As New List(Of String)
        Protected Sub GridView1_RowCommand(sender As Object, e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand
            Label1.Text = DateTime.Now
        End Sub
    
        Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            If Not IsPostBack Then
                If IsNothing(Session("lst")) Then
                    Session("lst") = lst
                End If
                GridView1.DataSource = lst
                GridView1.DataBind()
            End If
        End Sub
    
        Protected Sub Timer1_Tick(sender As Object, e As System.EventArgs) Handles Timer1.Tick
            lst = Session("lst")
            lst.Add(DateTime.Now.ToString())
            GridView1.DataSource = lst
            GridView1.DataBind()
        End Sub
     
    22 November 2011
    adatapost