台灣最大程式設計社群網站
線上人數
1186
 
會員總數:240116
討論主題:186186
歡迎您免費加入會員
討論區列表 >> ASP.NET >> GridView中取得目前使用的控制項所在的列
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
GridView中取得目前使用的控制項所在的列
價值 : 10 QP  點閱數:2112 回應數:15

樓主

CCS
門外漢
0 48
654 58
發送站內信

請問各位

如果在GridView裡面我選擇了Dropdownlist的內容

同時要將選擇的內容顯示在同一列另一個cell中的TextBox

請問這要怎麼辦到呢?

我知道可以用SelectedIndexChanged事件

但是我不曉得如何知道我是哪一列的Dropdownlist觸發這事件

如果知道就可以用GridView.Rows[i].FindControl的方式取得其他列的控制項

請問這問題有什麼解決方式呢?

謝謝

本篇文章發表於2014-09-17 20:08
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
不錯的參考

topcat
捐贈 VP 給 topcat 檢舉此回應
找到那個Row,再用FindControl去找

至於要怎麼找該DropDownList的Row
用【NamingContainer】

您可以在DropDownList的SelectedIndexChanged事件中

本篇文章回覆於2014-09-18 07:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
最有價值解答

Allen
捐贈 VP 給 Allen 檢舉此回應
很簡單,不必管身在哪一列
var ddl=sender as DropDownList;
var txt=ddl.FindControl("textbox1") as TextBox;
即可
本篇文章回覆於2014-09-18 08:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

MIS2000 Lab
檢舉此回應

1. Allen 這招我是第一次見識到,要學起來 :-)


2. 希望對您有幫助

[習題] NamingContainer取得 GridView的列數(RowIndex)、對應的資料表 這一列的主索引鍵
http://www.dotblogs.com.tw/mis2000lab/archive/2012/11/23/gridview_inside_dropdownlist_namincontainer_20121122.aspx
本篇文章回覆於2014-09-18 08:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
不錯的參考

毛豆
檢舉此回應
很少寫 WEB FORM 了

不過以前我會透過 CommandArgument 屬性,把需要的值在 Binding 都寫到這個屬性中

然後觸發事件時再取出來做判斷
本篇文章回覆於2014-09-18 10:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

CCS
檢舉此回應
感謝各位的回答

我後來跟同事討論出來的方式類似毛豆的方法

就是在Rowdatabound階段取得Dropdownlist控制項

利用attributes.add()來增加一個屬性

依照GridViewRowEventArgs事件的e取得目前是那一列

如此在SelectedIndexChanged時取得該Dropdownlist控制項

再取出該屬性就能知道目前是哪一列

感謝topcat跟MIS2000的分享讓我獲益良多

但Allen提出來的方法讓我頗為驚豔

我一直以為FindControl只能取得某個控制項中的控制項

在MSDN上對於FindControl的解釋也是「以指定的id去搜尋"當前容器內"的伺服器控制項」

沒想到對於其他旁邊的控制項也能找到

請問這有什麼原因嗎?

謝謝
本篇文章回覆於2014-09-18 22:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

Allen
捐贈 VP 給 Allen 檢舉此回應
這没什麼好驚豔的,主要是您及不少人都覺得安裝好word"就差不多會word"了。
看到FindControl,以為看懂英文字就會用這method,才會覺得我這麼寫很新奇。
我在教oop的課程裡,花比較多時間在教interface,會舉一些內建及自訂interface的例子,希望學生可以比較了解interface的重要性。而FindControl便是我上課時,用來講解interface的範例之一,時間大約1-2小時。所以你看了很新奇是自然現象,我的學生反應也是如此,也才會想聽我說明原理,範例讓人有興趣總是學起來會比較有興緻,對吧。
本篇文章回覆於2014-09-19 05:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
不錯的參考

Allen
捐贈 VP 給 Allen 檢舉此回應
Sorry,再補充說明一下。
您可以找一下INamingContainer 介面, NamingContainer 屬性, 了解 ClientID, UniqueID的生成規則及各自可以用在哪裡。
也可以學一下HtmlForm.DefaultButton, Panel.DefaultButton, 也許平時不會用到,但學INamingContainer時一起學也是不錯的。

大家常會在Repeater裡寫ItemTemplate, 或者在GridView裡寫TemplateField, 以便可以有不同layout, 如果覺得好用, 也可以學一下usercontrol如何也能有template。或者如何寫出有template功能的自訂控制項,它與INamingContainer也有一點關聯。

如果學會了,也可以再學一下除了可以用
new TextBox()
來建立並將控制項插入表單,以做到更靈活的表單之外。也可以動態插入Repeater,GridView,並且指定它們的Template。例如您寫了一個購物網站,想賣給很多客戶,但每個客戶針對結帳的item list版面有不同需求,便可以用這些技巧來做到。
本篇文章回覆於2014-09-19 06:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
#2
var ddl=sender as DropDownList;
var txt=ddl.FindControl("textbox1") as TextBox;


覺得有點怪
印象中
FindControl是從某個控制項去找包含在該控制項內的子控制項

一職以來小喵的觀念是
放在GridView的DropDownList
其父層用來FindControl的,應該是該DropDownList所在的GridViewRow(本來以為是Cell)
取其物件可以用NamingContainer取得,意思就是我的名子的歸屬者(擁有者)
而要找同層(也就是同父親的),就是取得父親,再由父親透過FindControl去找

但#2的方式完全顛覆這樣的想法
這是怎麼樣的邏輯來解釋?
^.^a


本篇文章回覆於2014-09-19 09:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

MIS2000 Lab
檢舉此回應
這個問題很有趣
剛好我以前也寫過類似的,不懂就請教了前輩

當初,前輩的說法是:
本篇文章回覆於2014-09-19 10:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
不錯的參考

Allen
捐贈 VP 給 Allen 檢舉此回應
to topcat,
>>印象中 FindControl是從某個控制項去找包含在該控制項內的子控制項
這是錯的,msdn裡也不是這麼說的,不過由於大家看不懂它在說什麼,就跳過,自己解釋了

http://msdn.microsoft.com/zh-tw/library/system.web.ui.control.findcontrol%28v=vs.110%29.aspx

Searches the current naming container for the specified server control.
在目前的命名容器搜尋指定的伺服器控制項。
本篇文章回覆於2014-09-19 19:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

Allen
捐贈 VP 給 Allen 檢舉此回應
to topcat,
>>小喵的觀念是 放在GridView的DropDownList 其父層用來FindControl的,應該是該DropDownList所在的GridViewRow(本來以為是Cell)
沒錯

>>取其物件可以用NamingContainer取得,意思就是我的名子的歸屬者(擁有者)
沒錯

>>而要找同層(也就是同父親的),就是取得父親,再由父親透過FindControl去找
沒錯

所以您在#1寫的程式是對的

本篇文章回覆於2014-09-19 19:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

MIS2000 Lab
檢舉此回應


我的天,原來 .FindControl()方法就跟 Naming Container息息相關了
我以前真的沒注意到他強調的關鍵字 -- Naming Container
本篇文章回覆於2014-09-19 22:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
回應

No.18
捐贈 VP 給 No.18 檢舉此回應
簡單利用Event Object Sender來FindControl
本篇文章回覆於2014-09-23 11:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
回應

No.18
捐贈 VP 給 No.18 檢舉此回應
透析FindControl
本篇文章回覆於2014-09-23 11:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
回應

789789789789
檢舉此回應
謝謝13樓,14樓
簡單利用Event Object Sender來FindControl 和 透析FindControl 這兩篇文章讓我收穫良多
本篇文章回覆於2017-07-12 17:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.