asp.net - updatePanel 内 GridView 内的 asp.ImageButton OnClick 函数

标签 asp.net vb.net gridview onclick updatepanel

我有一个 GridView,它使用计时器不断反弹,并且位于 updatePanel 内,因此页面不会持续刷新(每行都有一个倒计时序列,因此 gridview 需要不断更新)

在 gridview 中,我有一个带有 OnClick 方法的图像按钮。以前,为了触发 OnClick 方法,我会确保 gridView 不在 UpdatePanel 中,并且 gridview 的页面加载数据绑定(bind)位于“If Not IsPostBack”中。

使用计时器,虽然我无法让 gridview 绑定(bind)“If Not IsPostBack”,但它需要位于 UpdatePanel 中。

有没有办法使用 UpdatePanel 和“If Not IsPostBack”并仍然调用 OnClick 方法?

谢谢

如果我的解释没有完全有意义,这里是一些代码:

更新面板/计时器/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定时器方法:

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

ImageButton_Click 方法(当前从未调用过):

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

最佳答案

您需要使用 GridView 控件事件,尤其是 - 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>

隐藏代码:

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

   ....
  End If
End sub

除了 RowCommand 事件之外,您还必须为 RowCommand 事件添加 AsyncPostBackTrigger 条目。 (设置UpdatePanel.Triggers集合)。

演示:

标记

<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>

隐藏代码

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

关于asp.net - updatePanel 内 GridView 内的 asp.ImageButton OnClick 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8220006/

相关文章:

c# - 如何通过 web.config 将 http 重定向到 https 并将 www 重定向到非 www?

mysql - 如何在 vb 中将从一个表的 sql 总和获得的值插入到另一个表中?

c# - Gridview 更新返回 null

c# - 如何操作gridview的各个组标题

c# - 如何将用户输入的字符串与任何表示本地主机的内容匹配?

javascript - Haschildnodes() 不起作用

Asp.Net:如何允许内网用户访问页面并拒绝外网用户访问页面?

.net - vb .net,将现有属性(例如背景色)放入自定义类别

asp.net - 下拉条件列表项 ASP VB

asp.net - 在 ASP.NET GridView 中显示分页,即使是单个页面