从代码隐藏访问另一个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 grid2 = (GridView)grid1.FindControl("grid2")
GridView grid3 = (GridView)grid2.FindControl("grid3")
应该起作用。
您将看不到其他网格视图,因为它们隐藏在第一个网格视图中,要访问其他网格,您应该执行以下操作:
- 通过代码创建两个栅格视图控件,并将其命名为:GVsubone和GVsubtwo
- 在第一个网格视图(对您可见的视图)的RowDataBound中,使GVsubone处理网格2的事件,如下
grid2.RowDataBound += new EventHandler(GVsubone.RowDataBound);
- 然后在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内部的控件