2011-10-06 10 views
3

ページにマスター/チャイルドデータを表示する必要があり、同じ目的を達成するために複数のGridViewを使用しました。したがって、2つのGridView(親& Child)を作成しましたが、子のgridviewコントロールからButtonのクリックイベント(つまりbtnLock)を起動し、DB操作を実行したいとします。だから、私はこれを達成する方法を知らない。ネストされたGridView - 子のGridViewボタンのクリックイベントを発生させる方法

助けてください。

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

おかげ

答えて

0

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

関連する問題