首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET 利用 NamingContainer 取得 GridView 中 DropDownList 所在列索引

     編輯:ASP.NET 基礎

問題

GridView 模板欄位中的 DropDownList 觸發 SelectedIndexChanged 時,**無法像 Button 那樣設定 CommandName/CommandArgument** 直接取得列索引。

解決方案:NamingContainer

每個伺服器控制項的 NamingContainer 屬性指向**實作 INamingContainer 的最近父控制項**(對 GridView 而言即 GridViewRow)。

程式碼範例

protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
    DropDownList ddl = (DropDownList)sender;
    // 關鍵:透過 NamingContainer 取得包含此 DDL 的 GridViewRow
    GridViewRow row = (GridViewRow)ddl.NamingContainer;

    int rowIndex = row.RowIndex;                    // 列索引
    int dataKey = Convert.ToInt32(GridView1.DataKeys[rowIndex].Value); // 主鍵值
    string selected = ddl.SelectedValue;            // 使用者選擇的值

    // 後續業務邏輯...
}

原理說明

  • GridView 每列渲染為 GridViewRow,實作 INamingContainer,建立唯一命名範圍,確保同 ID 控制項在不同列不衝突。
  • NamingContainer 直接回傳該命名範圍的建立者,即該列的 GridViewRow 實例。
  • 同樣適用於 Repeater、DataList、ListView 等重複性控制項。

替代方案對比

方法優點缺點
NamingContainer簡潔、無需額外屬性、效能佳需理解命名容器概念
RowDataBound 綁定 CommandArgument直觀DropDownList 無 CommandArgument 屬性
隱藏欄位存 RowIndex通用增加標記、需額外 FindControl
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved