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

时间:2012-03-20 07:59:20

标签: c# asp.net .net devexpress aspxgridview

我在ascx第3页GridViews中创建,如:

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

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

3 个答案:

答案 0 :(得分:0)

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

  1. 通过代码创建两个网格视图控件让我们说出它们的命名:GVsubone 和GVsubtwo
  2. 在第一个gridview的RowDataBound中(可见的那个)让你的GVsubone处理你的grid2的事件,如grid2.RowDataBound += new EventHandler(GVsubone.RowDataBound);
  3. 然后在GVsubone RowDataBound中你必须做同样的逻辑来处理网格2的事件
  4. P.S。你可以处理任何事件RowDataBound就是一个例子。

答案 1 :(得分:0)

我认为

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

应该有用。

答案 2 :(得分:0)

更好的解决方案是在运行时为控件分配唯一ID(和ClientInstanceNames)以及脚本。 以下知识库文章中描述了此方法:The general technique of using the Init/Load event handler.

然后另一种方法是处理详细信息网格的ASPxGridView.DataBound事件,并通过sender参数获取对网格的引用。如果您使用主要详细信息,则可以在此处调用主网格的ASPxGridView.FindDetailRowTemplateContro l方法。

  

如果您使用的是GridView的DataRowTemplate,请使用   ASPxGridView.FindRowTemplateControl Method,你只需要得到   行的visibleIndex,你可以访问网格   它的名字。

如果您使用的是Coloumn模板,请使用ASPxGridView.FindRowCellTemplateControl Method

 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 - How to access controls inside DetailRow on the client side