嵌套GridView -如何触发子GridView按钮点击事件

本文关键字:GridView 事件 按钮 何触发 嵌套 | 更新日期: 2023-09-27 18:10:42

我需要在页面中显示主/子数据,我使用了多个GridViews来实现相同的功能。我创建了两个gridview (Parent &子),现在我想从子gridview控件触发按钮单击事件(即btnLock),并做一些DB操作。所以,我不知道如何做到这一点。

请帮助。

<asp:UpdatePanel ID="pnlUpdate" runat="server">
<ContentTemplate>
<asp:GridView Width="100%" AllowPaging="True" ID="gvCustomers" AutoGenerateColumns="False"
DataSourceID="sqlDsCustomers" runat="server" ShowHeader="False" OnRowCreated="gvCustomers_RowCreated">
<Columns>
<asp:TemplateField>
<ItemTemplate>
    <div class="group" id='<%#String.Format("customer{0}",Container.DataItemIndex) %>' onclick='showhide(<%#String.Format("'"#customer{0}'"",Container.DataItemIndex) %>,<%#String.Format("'"#order{0}'"",Container.DataItemIndex) %>)'>
        <asp:Image ID="imgCollapsible" CssClass="first" ImageUrl="~/Assets/img/plus.png"
            Style="margin-right: 5px;" runat="server" /><span class="header">
                <%#Eval("CustomerID")%>
                :
                <%#Eval("CompanyName")%>
                (<%#Eval("TotalOrders")%>
                Orders) </span>
    </div>
    <asp:SqlDataSource ID="sqlDsOrders" runat="server" ConnectionString="<%$ ConnectionStrings:Northwind %>"
        SelectCommand="SELECT [OrderID], [OrderDate], [RequiredDate], [Freight], [ShippedDate] FROM [Orders] WHERE ([CustomerID] = @CustomerID)">
        <SelectParameters>
            <asp:Parameter Name="CustomerID" Type="String" DefaultValue="" />
        </SelectParameters>
    </asp:SqlDataSource>
    <div id='<%#String.Format("order{0}",Container.DataItemIndex) %>' class="order">
        <asp:GridView AutoGenerateColumns="false" CssClass="grid" ID="gvOrders" DataSourceID="sqlDsOrders"
            runat="server" ShowHeader="true" EnableViewState="false">
            <RowStyle CssClass="row" />
            <AlternatingRowStyle CssClass="altrow" />
            <Columns>
                <asp:TemplateField ItemStyle-CssClass="rownum">
                    <ItemTemplate>
                        <%# Container.DataItemIndex + 1 %>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField HeaderText="Order ID" DataField="OrderID" ItemStyle-Width="80px" />
                <asp:BoundField HeaderText="Date Ordered" DataField="OrderDate" DataFormatString="{0:MM/dd/yyyy}"
                    ItemStyle-Width="100px" />
                <asp:BoundField HeaderText="Date Required" DataField="RequiredDate" DataFormatString="{0:MM/dd/yyyy}"
                    ItemStyle-Width="110px" />
                <asp:BoundField HeaderText="Freight" DataField="Freight" DataFormatString="{0:c}"
                    ItemStyle-Width="50px" ItemStyle-HorizontalAlign="Right" />
                <asp:BoundField HeaderText="Date Shipped" DataField="ShippedDate" DataFormatString="{0:MM/dd/yyyy}"
                    ItemStyle-Width="100px" />
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:Button ID="btnLock" Text="Lock" CommandName="Lock" CommandArgument=<%# Eval("OrderID") %> runat="server" />
                        </ItemTemplate>    
                    </asp:TemplateField>
            </Columns>
        </asp:GridView>
    </div>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>

谢谢

嵌套GridView -如何触发子GridView按钮点击事件

使用RowCommand:

 <asp:GridView AutoGenerateColumns="false" CssClass="grid" ID="gvOrders" DataSourceID="sqlDsOrders"
            runat="server" ShowHeader="true" EnableViewState="false"
            onrowcommand="gvOrders_RowCommand"
   >
   ........
 </asp:GridView >

 protected void gvOrders_RowCommand(Object sender, GridViewCommandEventArgs e)
 {
    // If multiple buttons are used in a GridView control, use the
    // CommandName property to determine which button was clicked.
    if(e.CommandName=="Lock")
    {
      // Convert the row index stored in the CommandArgument
      // property to an Integer.
      int index = Convert.ToInt32(e.CommandArgument);
      //dowork
    }
 }