c# - 嵌套 GridView - 如何触发子 GridView 按钮单击事件

标签 c# asp.net gridview

我需要在页面中显示主/子数据,我使用了多个 GridView 来实现相同的目的。因此,我创建了两个 GridView(父 subview ),现在我想从子 gridview 控件触发按钮单击事件(即 btnLock)并执行一些数据库操作。所以,我不知道如何实现这一目标。

请帮忙。

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

谢谢

最佳答案

使用行命令:

 <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

    }
 }    

关于c# - 嵌套 GridView - 如何触发子 GridView 按钮单击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7681562/

相关文章:

c# - ASP.NET 为整行数据表/ GridView 添加超链接

c# - Frame.Navigate 到不同程序集中的 Page 派生类

c# - 想知道线程理论

css - 为什么自定义字体未应用于我在 ASP.NET MVC 中的页面?

带有 IIS 的 ASP.NET Core - 不允许使用 HTTP 动词

php - 如何通过Ajax改变 GridView ? yii2

c# - C#中,当一个变量经过一个函数/方法时,原来的变量会不会改变?

javascript - 将实体图深入到 2 系列条形图

c# - 母版页和默认页

Android:GridView:滚动时如何只加载屏幕上显示的项目?