从代码隐藏访问另一个GridView中的GridView

本文关键字:GridView 中的 另一个 访问 代码 隐藏 | 更新日期: 2023-09-27 18:28:16

我在ascx第3页创建网格视图,如:

<dxwgv:ASPxGridView ID="grid1" ..... >
    <dxwgv:ASPxGridView ID="grid2" .... >
      <dxwgv:ASPXGridView ID="grid3" ....>
      </dxwgv>
    </dxwgv>
 </dxwgv>

但在后面的代码中,我只能看到第一个网格(grid1)ID,并且只能控制它。如何使用其他网格?

从代码隐藏访问另一个GridView中的GridView

我认为

GridView grid2 = (GridView)grid1.FindControl("grid2")
GridView grid3 = (GridView)grid2.FindControl("grid3")

应该起作用。

您将看不到其他网格视图,因为它们隐藏在第一个网格视图中,要访问其他网格,您应该执行以下操作:

  1. 通过代码创建两个栅格视图控件,并将其命名为:GVsubone和GVsubtwo
  2. 在第一个网格视图(对您可见的视图)的RowDataBound中,使GVsubone处理网格2的事件,如下grid2.RowDataBound += new EventHandler(GVsubone.RowDataBound);
  3. 然后在GVsubone RowDataBound中,您必须执行相同的逻辑来处理网格2的事件

附言:你可以处理任何事件RowDataBound就是一个例子。

更好的解决方案是在运行时为控件分配唯一的ID(和ClientInstanceNames)以及脚本。在以下知识库文章中描述了这种方法:使用Init/Load事件处理程序的一般技术。

然后另一种方法是处理细节网格的ASPxGridView.DataBound事件,并通过sender参数获得对该网格的引用。如果您使用主详细信息,您可以在这里调用主网格的ASPxGridView.FindDetailRowTemplateControl方法。

如果您正在使用GridView的DataRowTemplate,请使用ASPxGridView.FindRowTemplateControl方法,您只需要行的visibleIndex,您可以使用它的名字。

如果您使用的是Coloumn模板,则使用ASPxGridView.FindRowCellTemplateControl方法

 protected void ASPxGridView1_HtmlDataCellPrepared(object sender, ASPxGridViewTableDataCellEventArgs e) {
        if(e.DataColumn.FieldName == "title") {
            ASPxTextBox textBox = ASPxGridView1.FindRowCellTemplateControl(e.VisibleIndex, e.DataColumn, "ASPxTextBox1") as ASPxTextBox;
            textBox.Text = Convert.ToString(e.CellValue);
        }
    }

参考这些:
ASPxGridView-如何访问客户端上DetailRow内部的控件