在asp.net 2.0中增加了乙個新的資料繫結控制項:gridview,其目的用來取代asp.net1.x中的datagrid控制項,但有一點很不爽的是,如果把某列設定為visible=false,則不會進行資料繫結,也就是說無法直接從gridview中取到這個列內的文字。
這一功能在datagrid時代幾乎是必須的,在對列表進行批量選中操作時非常有用(比如批量刪除),隱藏列通常用於儲存datagrid行對應資料記錄的關鍵字的值,而現在在gridview中卻行不通,著實令一大批人頭疼不已,網上也有了其解決方案,其中乙個如下,其原理是在行建立時設定其css樣式為不可見,這樣可以避免直接設定列的visible=false帶來的資料不繫結問題:
void
gridview1_rowcreated
(object
sender
,gridviewroweventargse)
個人認為此方法不夠優雅,asp.net 1.x年代本人就盡量避免使用事件,寧可在資料來源datatable中做迴圈遍歷來進行一些或煩或簡的處理。一來因為vs2003對web標準支援欠佳,而我習慣於在html原始碼模式下工作,所以為datagrid新增乙個事件是極其麻煩的事情;二來因為其效能我也不大放心,畢竟每一行都要觸發一次事件。因而在gridview中仍然不喜歡事件,而且即使vs2005對web標準的支援大大改善,但新增乙個事件容易,刪除乙個事件還是要在兩個檔案中進行手動刪除才能同步,比較麻煩。
就事論事,回到標題,現提供我對這個問題的解決方案,基本思想仍然是用css使得單元格不可見,而不妨礙它的資料繫結,但我的方法卻不需要在cs檔案中多加一行**,其思路如下:
(1)設定乙個css類:
.hidden
在web標準橫行的現在,我想為每個aspx鏈結乙個common.css是基本的素質,呵呵
(2)隨後在gridview的列編輯對話方塊中,對需要進行隱藏的列進行設定,分別設定footstyle,headerstyle,itemstyle的cssclass屬性為「hidden」
ok,這樣我們就實現了隱藏列的目的,同時又能保證對其進行資料繫結。
是的,在datagrid中,要實現這個功能,隱藏列來儲存鍵值是必須的,甚至是乙個初學者需要摸索才能知道的技巧。然而現在gridview是用來替代datagrid的,微軟所作的考慮更加周全。針對datagrid無法提供行主鍵的問題,它提供了兩個全新的屬性:datakeys和datakeynames!其sdk中的描述如下:
datakeynames:獲取或設定乙個陣列,該陣列包含了顯示在 gridview 控制項中的項的主鍵欄位的名稱。
datakeys:獲取乙個 datakey 物件集合,這些物件表示 gridview 控制項中的每一行的資料鍵值。
看到這裡,也許你會有所明白,針對批量選中操作的問題,我們有了新的方案,現在來看乙個簡單的實現,假設主鍵欄位是id:
//設定主鍵欄位名稱陣列,可以多個字段,
//你也可以在設計器中直接設定主鍵字段,多個欄位用逗號隔開
gridview1
.datakeynames
=new
string
;這樣,當進行資料繫結時,gridview會自動用鍵值填充datakeys集合,從而在繫結或者回傳後可以通過datakeys集合來獲取某一行的鍵值,例如假設想獲取第i行的id鍵值,其**如下:
//獲取第i行的id鍵值,注意該索引即行的索引,從header到footer都算在內
stringid=
gridviews1
.datakeys[i
]["id"
].tostring
();//通過鍵值對資料進行處理……
不過有個小地方要特別注意。如果你在手動變更
的內容前,是使用資料集作為
的資料邏輯層,那麼在改變
之後,你必須回資料集修改其宣告(進資料集,點按滑鼠右鍵,選擇「程式**檢視」)。請在
區段中,參考
的寫法,手動加上
這個引數。如果你怕寫錯,你可以從或中把
的宣告拷貝過來使用,然後再把它改成
就可以了。
如果你不這樣做的話,你將會發現
無法刪除某行資料列。
由此可見,gridview提供了新的機制來繫結額外的資料到每一行。這使得可以完全放棄原來datagrid通過隱藏列來繫結鍵值的做法.
如何取得GridView被隱藏列的值
今天在csdn上看到有人問 如何取得gridview被隱藏列的值?當gridview列使用了visible false時,資料就不會被載入到 中了,自然也取不到值了。但是我們就是想要取這個隱藏列的值該怎麼辦呢?我也遇到過這個問題,印象中是設定gridview的datakeys屬性。網上搜了一下,總結...
取得gridview隱藏列的值
再次鬱悶了,05的gridview隱藏列就不能進行繫結值,也就是如果把某列設定為visible false,則不會進行資料繫結,也就是說無法直接從gridview中取到這個列內的文字。查了下資料了解了原來還是05對標準web 2.0的支援。這 一功能在datagrid 時代幾乎是必須的,在對列表進行...
GridView中如何取隱藏列的值
1.gridview中如果有隱藏列的話,通過這種方式值取不到值的 this.gridview.rows e.neweditindex cells 2 text 所以必須通過其他的方式來取值 protected void gridview rowdatabound object sender,grid...