簡體   English   中英

從代碼隱藏訪問另一個GridView內部的GridView

[英]Access GridView inside another GridView from code-behind

我在ascx頁面3 GridViews中創建,如下所示:

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

但是在后面的代碼中,我僅看到第一個網格(grid1)ID,並且只能對其進行控制。 如何使用別人?

您將看不到其他網格視圖,因為它們被隱藏在第一個網格視圖中,要訪問其他網格視圖,您應該執行以下操作:

  1. 通過代碼創建兩個網格視圖控件,可以說出它們的名字:GVsubone和GVsubtwo
  2. 在第一個gridview的RowDataBound中(對您可見),使您的GVsubone處理您的grid2事件,例如grid2.RowDataBound += new EventHandler(GVsubone.RowDataBound);
  3. 然后在GVsubone RowDataBound中,必須執行相同的邏輯來處理網格2的事件

PS您可以處理任何事件RowDataBound就是一個例子。

我認為

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

應該管用。

更好的解決方案是在運行時為控件分配唯一的ID(和ClientInstanceNames)以及腳本。 以下知識庫文章中介紹了這種方法: 使用Init / Load事件處理程序的一般技術。

然后另一種方法是處理詳細信息網格的ASPxGridView.DataBound事件,並通過sender參數獲取對該網格的引用。 如果您正在使用“ 主詳細信息”,則可以在此處調用主網格的ASPxGridView.FindDetailRowTemplateContro方法。

如果您使用的是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內部訪問控件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM