![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 CCS ![]()
![]() |
如果在GridView裡面我選擇了Dropdownlist的內容 同時要將選擇的內容顯示在同一列另一個cell中的TextBox 請問這要怎麼辦到呢? 我知道可以用SelectedIndexChanged事件 但是我不曉得如何知道我是哪一列的Dropdownlist觸發這事件 如果知道就可以用GridView.Rows[i].FindControl的方式取得其他列的控制項 請問這問題有什麼解決方式呢? 謝謝
本篇文章發表於2014-09-17 20:08
|
1樓
不錯的參考
topcat ![]() ![]() |
找到那個Row,再用FindControl去找
至於要怎麼找該DropDownList的Row 用【NamingContainer】 您可以在DropDownList的SelectedIndexChanged事件中
本篇文章回覆於2014-09-18 07:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
2樓
最有價值解答
Allen ![]() ![]() |
很簡單,不必管身在哪一列
var ddl=sender as DropDownList; var txt=ddl.FindControl("textbox1") as TextBox; 即可
本篇文章回覆於2014-09-18 08:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
3樓 |
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樓 |
這没什麼好驚豔的,主要是您及不少人都覺得安裝好word"就差不多會word"了。
看到FindControl,以為看懂英文字就會用這method,才會覺得我這麼寫很新奇。 我在教oop的課程裡,花比較多時間在教interface,會舉一些內建及自訂interface的例子,希望學生可以比較了解interface的重要性。而FindControl便是我上課時,用來講解interface的範例之一,時間大約1-2小時。所以你看了很新奇是自然現象,我的學生反應也是如此,也才會想聽我說明原理,範例讓人有興趣總是學起來會比較有興緻,對吧。
本篇文章回覆於2014-09-19 05:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
7樓
不錯的參考
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樓 |
#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樓 |
這個問題很有趣
剛好我以前也寫過類似的,不懂就請教了前輩 當初,前輩的說法是:
本篇文章回覆於2014-09-19 10:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
10樓
不錯的參考
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樓 |
to topcat,
>>小喵的觀念是 放在GridView的DropDownList 其父層用來FindControl的,應該是該DropDownList所在的GridViewRow(本來以為是Cell) 沒錯 >>取其物件可以用NamingContainer取得,意思就是我的名子的歸屬者(擁有者) 沒錯 >>而要找同層(也就是同父親的),就是取得父親,再由父親透過FindControl去找 沒錯 所以您在#1寫的程式是對的
本篇文章回覆於2014-09-19 19:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
12樓 |
我的天,原來 .FindControl()方法就跟 Naming Container息息相關了 我以前真的沒注意到他強調的關鍵字 -- Naming Container
本篇文章回覆於2014-09-19 22:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
13樓 | |
14樓 | |
15樓 |
謝謝13樓,14樓
簡單利用Event Object Sender來FindControl 和 透析FindControl 這兩篇文章讓我收穫良多
本篇文章回覆於2017-07-12 17:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |