如何通过外部按钮单击事件在嵌套的 GridView 中查找内部 Gridview?

How to Find the Inner Gridview in a nested GridView via external button click event?

我对嵌套的 Gridview 有疑问!

我有两个 ID 为 GridView1(父 Gridview)和 GV2(子 Gridview)的 Girdview

我有一个 Asp:Button ID - btnedit(Event = OnClick())

问:如何在btnedit_Onclick活动中访问GV2?

我已附上代码供您参考:

<form id="form1" runat="server">
        <asp:Button runat="server" ID="btnedit" Text="Edit" OnClick="btnedit_Click" />
        <asp:GridView runat="server" ID="Gridview1">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:Label runat="server" ID="Lable1"></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:GridView runat="server" ID="GV2">
                            <Columns>
                                <asp:TemplateField>
                                    <ItemTemplate>
                                        <asp:Label runat="server" ID="Lable2"></asp:Label>
                                    </ItemTemplate>
                                </asp:TemplateField>
                            </Columns>
                        </asp:GridView>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    </form>

隐藏代码:

protected void btnedit_Click(object sender, EventArgs e)
  {

  }
    

这可能会让您入门...

GridView gvGV2 = e.Row.FindControl("GV2") as GridView;
gvGV2.DataSource = "..."; //Your DataSource
gvGV2.DataBind();
// or do something else.

好的,所以用户想对主GV的第1行进行操作,然后得到子GV的第1行。

Gridviews 从 0 开始,所以不清楚,但让我们取前两行。

接下来呢?我真的(但真的真的)建议你使用一个主列表视图,然后嵌套一个子 GV。

如果你嵌套两个 GV,你往往会得到这个:

说这个GV,用“+”展开子网格:

然后扩展,你会得到这个:

因此,嵌套网格非常困难,因为“col span”很难设置。

但是,如果我构建一个主列表视图(看起来与 GV 相同),然后再构建一个 gv,那么我会得到:

所以上面使用了主列表视图,因此为了扩展子记录,我确实在列表视图的子视图中使用了 GV。

我可以post上面的工作原理,如果您愿意,甚至可以是标记。

但是,让我们使用两个嵌套的 GV - 它会把 UI 搞得一团糟但是为了学习,这与上面嵌套的 LV + GV 或 GV + GV 的工作原理是相同的.

所以,一些平面简按钮 - 在两个网格之外,获取主网格的第一行,然后是子网格的第一行。

有效:

    protected void Button1_Click(object sender, EventArgs e)
    {
        GridViewRow MainGvRow = GridView1.Rows[0];
        GridView ChildGV = MainGvRow.FindControl("GridView2") as GridView;

        GridViewRow ChildGVRow = ChildGV.Rows[0]
    }