0

私は Gridview2(child) をネストしており、ボタンのクリックでチェックされた行を取得したいと考えています。

ボタンクリックイベントから Gridview2 にアクセスしようとすると、アクセスできません。ただし、親の Gridview1 にはアクセスできます。

ボタンのクリック時に子グリッドビューのチェックされた行を取得する方法を誰かが説明してくれますか?

また、Button は子 Gridview の列ヘッダーです。

これが私のコードです。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    BackColor="White" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" 
    CellPadding="3" GridLines="Horizontal" 
    onrowdatabound="GridView1_RowDataBound" DataKeyNames="id1">
    <AlternatingRowStyle BackColor="#F7F7F7" />
    <Columns>

        <asp:TemplateField>
         <ItemTemplate>
                    <a href="javascript:collapseExpand('id1_<%# Eval("id1") %>');">
                        <img id="imageSubId_<%# Eval("id1") %>" alt="Click to show/hide orders" border="0"
                            src="Images/bullet_toggle_plus.jpg" /></a>
                </ItemTemplate>
            </asp:TemplateField>
        <asp:BoundField DataField="id1" HeaderText="ID" />
        <asp:TemplateField>
            <ItemTemplate>
            <tr>
            <td colspan="100%">
               <div id="rid1_<%# Eval("id1") %>" style="display: none; position: relative; left: 25px;">
                <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="false" CellPadding="4" ForeColor="#333333" 
                    GridLines="None" OnRowCommand="Gridview2_RowCommand">
                    <Columns>

                    <asp:BoundField DataField="fname" HeaderText="First Name" />
                    <asp:BoundField DataField="mname" HeaderText="Middle Name" />
                    <asp:BoundField DataField="lname" HeaderText="Last Name" />
                    <asp:TemplateField>
                    <ItemTemplate>

                    <asp:CheckBox ID="checkselect" runat="server" />

                    </ItemTemplate>
                    <HeaderTemplate>
                        <asp:Button ID="Button4" runat="server" Text="Remove" CommandName="Split" OnClick="Button4_Click" />
                         <ajaxToolkit:ModalPopupExtender ID="ModalPopupExtender1" runat="server" TargetControlID="Button4" PopupControlID="Panel1" CancelControlID="Button1">
                        </ajaxToolkit:ModalPopupExtender>

                        </HeaderTemplate>

                    </asp:TemplateField> </Columns></asp:GridView>
                </div>
                </td>
                </tr>
            </ItemTemplate>
        </asp:TemplateField>
        </Columns>
       </asp:GridView>
4

1 に答える 1

1

私がしたいことは、関連する GridView2 を見つけられるようにするCommandArgumenttoの宣言を追加することです。Button4

だから、私はあなたが他の場所で使用しているものを使用しますid1. 宣言に追加CommandArgument='<%# Eval("id1") %>'します。Button4

ここで、Button4_Click で、送信者を次のButtonようにキャストできます。

var button4 = (Button)sender;

button4 を に正しくキャストしたらButton、CommandArgument プロパティにアクセスできます。

var id1 = button4.CommandArgument;

id1 を取得したら、親GridViewである GridView1 を反復処理するのと同じくらい簡単です。2 番目の列もバインドさid1れているように見えるので、次のようにします。

GridView foundGridView2;
foreach(GridViewRow gvr in GridView1.Rows)
{
    if(gvr.RowType == DataControlRowType.DataRow && gvr.Cells[1].Text == id1)
    {
        foundGridView2 = gvr.FindControl("GridView2");
        break; // Once we've found it, no need to iterate through other items
    }
}

この時点で、見つかった GridView2 にアクセスできるようになり、GridView2 の行を反復処理してチェックボックスをオンにすることができます。それを行うのに助けが必要な場合はお知らせください。

親 GridView1 が Button4 のクリックを飲み込んでいる可能性があるため、回答に追加します。

GridView1 のOnRowCommandイベントのイベント ハンドラーを作成します。

結果のGridView1_RowCommand()メソッドでは、次を使用して、Button4Clickイベントのみを処理します。

if(e.CommandName == "Split")
{
    // At this point I would refactor out the code you put in Button4_Click 
    // into a separate method.  I'll give you an example:
    HandleButton4Click(e.CommandArgument); // e.CommandArgument will contain the id1
}
于 2013-06-28T14:56:01.757 に答える