好讓我們可以去修改同一列的內容
雖然提出了一個方式
但可以解決這問題的方式果然不只一種
論壇上topcat跟MIS2000提出用NamingContainer來取得我在哪個控制項中(就是GridViewRow)
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { DropDownList ddl = sender as DropDownList; GridViewRow gv = ddl.NamingContainer as GridViewRow; Label lb = gv.FindControl("Label1") as Label; lb.Text = ddl.SelectedValue; }
不過讓我覺得神奇是Allen提出來的方式
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { var ddl = sender as DropDownList; var lb = ddl.FindControl("Label1") as Label; lb.Text = ddl.SelectedValue; }
重點在var lb = ddl.FindControl("Label1") as Label;這段
我本來以為FindControl是專門用來找某個控制項中的子控制項(剛好跟NamingContainer相反)
但居然可以用同一階的控制項找到其他控制項
這可就神奇了~
因為依照MSDN上的解釋FindControl的功能「以指定的id去搜尋當前容器"內"的伺服器控制項。」
既然是內沒想到連隔壁的都可以找到
看來我對FindControl特性還不夠熟
有好好研究的必要!
參考文獻
使用 NamingContainer 屬性決定控制項的命名容器
Control.NamingContainer 屬性
HOW TO:存取 Web 伺服器控制項命名空間的成員
Control.FindControl 方法 (String)
GridView中取得目前使用的控制項所在的列