[C#][ASP.Net]找回TextBox所屬的GridView

摘要:[C#][ASP.Net]找回TextBox所屬的GridView

文章標題有點不好下,主要的意思是說在GridView中的樣板有放置一個或多個TextBox,當觸發TextBox的TextChanged事件時,有時候我們需要一些和GridView相關的訊息(例如RowIndex甚或整個GridView),此時該如何取得我們需要的訊息呢?

簡單兩行即可搞定:

1 protected void TextBox_TextChanged(object sender, EventArgs e)
2 {
3     GridViewRow gvr = (GridViewRow)(((TextBox)sender).Parent).Parent;
4     GridView gv = (GridView)(gvr.Parent).Parent;
5 }

第3行取得了GridViewRow就可以取得RowIndex,譬如gvr.RowIndex;第四行可以讓你取得TextBox所"駐"的整個GridView。

套一句常說的話:有了GridView,天下還不都是你的了嗎?

 

7/21/2009 更新:

感謝眾網友提供的意見,首先把之前文章沒講清楚的環境補充完整。(順便讓大家練習一下通靈...)

情境:當畫面上有多於2個GridView control,而多個TextBox共享一個TextChanged事件的時候。

目的:判別被觸發的TextBox是由哪個GridView所擁有,進而使用不同的邏輯流程。

網友kim提供了使用NamingContainer屬性的方式如下

GridViewRow gvr = (GridViewRow)((TextBox)sender).NamingContainer;
GridView gv = (GridView)gvr.NamingContainer;

如果只要GridView的話

GridView gv = (GridView)((GridViewRow)((TextBox)sender).NamingContainer).NamingContainer;

此法更簡單也省卻多層尋找parent的麻煩。

 PS:不只TextBox,所有包在GridView裡面的物件都可以這樣找。