嵌套的GridView - 如何触发Child GridView按钮Click事件

嵌套的GridView - 如何触发Child GridView按钮Click事件

问题描述:

我需要在页面中显示主/子数据,并且我已经使用多个GridView来实现相同的功能。所以,我创建了两个GridView(父& Child),现在我想从子Gridview控件中触发Button click事件(即btnLock)并执行一些数据库操作。所以,我不知道如何实现这一点。嵌套的GridView - 如何触发Child GridView按钮Click事件

请帮忙。

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

感谢

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

    } 
}  
+0

我想你的建议,但代码不被解雇。我也调试过,但代码没有达到。 – user972255

+0

其实我已经删除了EnableViewState =“false” ,它工作正常。但有没有什么办法可以不使用视图状态我们可以触发事件?因为我的数据非常庞大,当我携带所有这些东西时,我的页面会变得非常缓慢。 – user972255

+0

我没有针对您的推荐,但并非所有控件都可以在没有ViewState的情况下触发事件。您可以将ViewState保留在服务器上。 http://blogs.msdn.com/b/alikl/archive/2008/01/08/how-to-keep-asp-net-viewstate-on-the-server-revised.aspx –