日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

GridView隐藏列取值解决方案

發布時間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GridView隐藏列取值解决方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【摘要】
在Asp.net?2.0中增加了一個新的數據綁定控件:GridView,其目的用來取代Asp.net1.x中的DataGrid控件,但有一點很不爽的是,如果把某列設置為visible=false,則不會進行數據綁定,也就是說無法直接從GridView中取到這個列內的文本。
【全文】

在Asp.net?2.0中增加了一個新的數據綁定控件:GridView,其目的用來取代Asp.net1.x中的DataGrid控件,但有一點很不爽的是,如果把某列設置為visible=false,則不會進行數據綁定,也就是說無法直接從GridView中取到這個列內的文本。
這一功能在DataGrid時代幾乎是必須的,在對列表進行批量選中操作時非常有用(比如批量刪除),隱藏列通常用于存儲DataGrid行對應數據記錄的關鍵字的值,而現在在GridView中卻行不通,著實令一大批人頭疼不已,網上也有了其解決方案,其中一個如下,其原理是在行創建時設置其css樣式為不可見,這樣可以避免直接設置列的visible=false帶來的數據不綁定問題:

void?GridView1_RowCreated(object?sender,?GridViewRowEventArgs?e)
{
?//讓索引為0的列不可見,實際上是產生的css代碼
?e.Row.Cells[0].Visible?=?false;
?//other?code?if?neccecary
}

個人認為此方法不夠優雅,Asp.net?1.x年代本人就盡量避免使用事件,寧可在數據源DataTable中做循環遍歷來進行一些或煩或簡的處理。一來因為vs2003對web標準支持欠佳,而我習慣于在Html源碼模式下工作,所以為DataGrid添加一個事件是極其麻煩的事情;二來因為其性能我也不大放心,畢竟每一行都要觸發一次事件。因而在GridView中仍然不喜歡事件,而且即使vs2005對web標準的支持大大改善,但添加一個事件容易,刪除一個事件還是要在兩個文件中進行手動刪除才能同步,比較麻煩。

就事論事,回到標題,現提供我對這個問題的解決方案,基本思想仍然是用css使得單元格不可見,而不妨礙它的數據綁定,但我的方法卻不需要在cs文件中多加一行代碼,其思路如下:
(1)設置一個css類:

.hidden?{?display:none;}


在web標準橫行的現在,我想為每個aspx鏈接一個common.css是基本的素質,呵呵
(2)隨后在GridView的列編輯對話框中,對需要進行隱藏的列進行設置,分別設置FootStyle,HeaderStyle,ItemStyle的CssClass屬性為“hidden”
Ok,這樣我們就實現了隱藏列的目的,同時又能保證對其進行數據綁定。

好了,看到這里,如果你有所收獲,并很高興的馬上趕回去,為你的GridView添加此設置,避免了使用事件來隱藏列,并實現了批量刪除的功能。那你就大錯特錯了,呵呵
很可惜的是,在網上看到很多人關于GridView的這個功能的討論,很大一部分人都是為了這個功能而來的。

是的,在DataGrid中,要實現這個功能,隱藏列來存儲鍵值是必須的,甚至是一個初學者需要摸索才能知道的技巧。然而現在GridView是用來替代DataGrid的,微軟所作的考慮更加周全。針對DataGrid無法提供行主鍵的問題,它提供了兩個全新的屬性:DataKeys和DataKeyNames!其SDK中的描述如下:
DataKeyNames:獲取或設置一個數組,該數組包含了顯示在?GridView?控件中的項的主鍵字段的名稱。?
DataKeys:獲取一個?DataKey?對象集合,這些對象表示?GridView?控件中的每一行的數據鍵值。?

看到這里,也許你會有所明白,針對批量選中操作的問題,我們有了新的方案,現在來看一個簡單的實現,假設主鍵字段是id:

//設置主鍵字段名稱數組,可以多個字段,
//你也可以在設計器中直接設置主鍵字段,多個字段用逗號隔開
GridView1.DataKeyNames?=?new?string[]?{?"id"?};?

這樣,當進行數據綁定時,GridView會自動用鍵值填充DataKeys集合,從而在綁定或者回傳后可以通過DataKeys集合來獲取某一行的鍵值,例如假設想獲取第i行的id鍵值,其代碼如下:

//獲取第i行的id鍵值,注意該索引即行的索引,從header到footer都算在內
string?id=GridViews1.DataKeys[i]["id"].ToString();
//通過鍵值對數據進行處理……

由此可見,GridView提供了新的機制來綁定額外的數據到每一行。這使得可以完全放棄原來DataGrid通過隱藏列來綁定鍵值的做法,顯然,現在的方案要優雅的多。當然,如果你實在需要在GridView中使用隱藏列并能夠進行取值,我上面的方法不防一試,雖然我很難想到有這樣的需求^_^

?

總結

以上是生活随笔為你收集整理的GridView隐藏列取值解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。