一個較優雅的GridView隱藏列取值解決方案
在Asp.net 2.0中增加了一個新的資料繫結控制元件:GridView,其目的用來取代Asp.net1.x中的DataGrid控制元件,但有一點很不爽的是,如果把某列設定為visible=false,則不會進行資料繫結,也就是說無法直接從GridView中取到這個列內的文字。
這一功能在DataGrid時代幾乎是必須的,在對列表進行批量選中操作時非常有用(比如批量刪除),隱藏列通常用於儲存DataGrid行對應資料記錄的關鍵字的值,而現在在GridView中卻行不通,著實令一大批人頭疼不已,網上也有了其解決方案,其中一個如下,其原理是在行建立時設定其css樣式為不可見,這樣可以避免直接設定列的visible=false帶來的資料不繫結問題:
{
//讓索引為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類:
在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鍵值,其程式碼如下:
string id=GridViews1.DataKeys[i][“id”].ToString();
//通過鍵值對資料進行處理……
由此可見,GridView提供了新的機制來繫結額外的資料到每一行。這使得可以完全放棄原來DataGrid通過隱藏列來繫結鍵值的做法,顯然,現在的方案要優雅的多。當然,如果你實在需要在GridView中使用隱藏列並能夠進行取值,我上面的方法不防一試,雖然我很難想到有這樣的需求^_^
=======================================================================================================
還有種方式:
public void bind()
{
string sqlstr = “select top 5 * from 飛狐工作室”;
sqlcon = new SqlConnection(strCon);
SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);
DataSet myds = new DataSet();
sqlcon.Open();
myda.Fill(myds, “飛狐工作室”);
GridView1.DataSource = myds;
GridView1.DataKeyNames = new string[] { “身份證號碼” };
GridView1.DataBind();
sqlcon.Close();
GridView1.Columns[3].Visible = false;//一開始隱藏
}
相關文章
- 一種更優雅的Flutter Dialog解決方案Flutter
- Android輸入鍵盤隱藏解決方案Android
- 物件拷貝 - 優雅的解決方案 Mapstruct物件Struct
- Vue微信授權登入前後端分離較為優雅的解決方案Vue後端
- 一稿設計多端適配優雅的解決方案 - remREM
- GridView繫結資料與隱藏指定控制元件(模板列)View控制元件
- 幹掉Session?這個跨域認證解決方案真的優雅!Session跨域
- Oracle 隱藏列Oracle
- ListView巢狀GridView解決方案View巢狀
- 一次隱藏較隱蔽的SQL最佳化問題----不要輕易的忽視count(列)SQL
- 優雅的快取解決方案--設定過期時間快取
- 不同解決方案的比較
- OSX中隱藏和顯示[隱藏檔案]的命令列命令列
- jQuery隱藏一個div元素jQuery
- css如何隱藏一個元素CSS
- 隱藏的寶藏,13個不可忽視的優秀 Python 庫Python
- go 中 defer 的一個隱藏功能Go
- 六個優雅的 Linux 命令列技巧Linux命令列
- iOS隱藏狀態列iOS
- DB2隱藏列DB2
- MFC彈出選單隱藏解決
- 解決webapp 鍵盤不隱藏WebAPP
- 優雅的快取解決方案--SpringCache和Redis整合(SpringBoot)快取GCRedisSpring Boot
- jQuery.position()方法獲取值為0解決方案jQuery
- vue中點選空白處隱藏div的實現(用指令優雅的實現)Vue
- 【Android Fragment】友盟統計 Fragment 頁面顯示隱藏的完美解決方案AndroidFragment
- ELK一個優秀的日誌收集、搜尋、分析的解決方案
- 記一次隱藏很深的 JVM 線上慘案的分析、排查、解決!JVM
- 如何判斷一個元素是否隱藏
- 一個小問題的解決方案
- 如何優雅的提交一個表單
- 如何隱藏工作列的圖示win10_win10怎麼隱藏狀態列圖示Win10
- BeeHive —— 一個優雅但還在完善中的解耦框架Hive解耦框架
- 分享15個優秀的CSS解決方案和工具CSS
- win10怎樣隱藏工作列_win10全屏工作列隱藏操作方法Win10
- 工作列隱藏了怎麼還原 電腦隱藏了工作列怎麼恢復
- Windows10系統下qq圖示被隱藏的兩個解決方法Windows
- Ant Design Vue 的 table 隱藏特定列Vue