1. 程式人生 > >GridView隱藏列的方法

GridView隱藏列的方法

在Asp.net 2.0中增加了一個新的資料繫結控制元件:GridView,其目的用來取代Asp.net1.x中的DataGrid控制元件。
獲取GridView中的某列值的方法為
   protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        string id = GridView1.Rows[e.NewEditIndex].Cells[0].Text;
        Response.Redirect("TempletEdit.aspx?id=" + id);
    }
同理,獲取GridView中的鍵值的方法為
   protected void GridView1_SelectChanging(object sender, GridViewEditEventArgs e)
    {
        string id = GridView1.DataKeys[e.NewSelectIndex].Value.ToString();
        Response.Redirect("TempletEdit.aspx?id=" + id);
    }
但這種方法無法獲取隱藏列和模板列
的值。
但有一點很不爽的是,如果把某列設定為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隱藏方法

在Asp.net 2.0中增加了一個新的資料繫結控制元件:GridView,其目的用來取代Asp.net1.x中的DataGrid控制元件。獲取GridView中的某列值的方法為   protected void GridView1_RowEditing(object sender, GridViewEdit

C#中GridView隱藏方法

一開始解決這個問題的時候,查了google,發現都不是我想要的,在 GridViewColumn中,它有個屬性Width,如果設定為0,就沒有顯示出來,其實這個是虛假的,你可以把它再介面上拉長,因此不是我想要的。 後來在網上查到說是用GridView.Columns[

gridview隱藏的幾種方法

如果要對gridview的某個列根據條件隱藏或者隱藏不必要的列 一、簡單方法: GridViewBrand為gridview控制元件,要對第3列進行現在,就可以在gridview資料繫結完成之後這樣寫:   if (...)            {             

解決無法獲取 GridView 隱藏值問題

在 GridView/DetailsView 中如果 BoundField 的 Visible=false 時,  回發的時候無法此列的值(GridViewRow.Cells[cellIndex].Text將為空),網上很多朋友提出了各種各樣的解決方案,這裡整理一下,並提供

【整理】C#中GridView隱藏指定方法

試了好幾種方法,總算成功了。 (1)在GridView的標籤處設定OnRowCreated="GridView1_RowCreated" ; (2)在RowCreated事件中書寫如下程式碼    void GridView1_RowCreated(object send

jquery.datatables設置隱藏方法

項目 隱藏 als get classname column .data 設置表格 clas 項目需要根據權限設置表格(使用Juqery.datatables,版本:1.10.16)某列顯示或隱藏,百度後有兩種實現方法: 1、在columns中設置: colu

ASP.NET Gridview 控制單元格換行及隱藏

        特別注意:設定單元格的寬度不起作用,二.控制整個Gridview的換行,在RowDataBound事件中加以下語句        gvDeliverySummary.Attributes.Add("style", "word-break:keep-all;word-wrap:normal");

如何取得GridView隱藏的值

問題: 在GridView中,在使用者點選按鈕的事件中可以使用下面的方法取當前行中某一列的值(從幫助裡copy出來的程式碼) int index = Convert.ToInt32(e.CommandArgument);// Retrieve the row that con

ASP.NET GridView動態顯示隱藏,並儲存客戶的配置(使用者控制元件Cookie版)

ASP.NET開發中,會遇到有些客戶提出這樣需求,可根據需求編輯GridView列顯示以及隱藏,這個使用者控制元件就是為了這個需求而生。 自動從GridView中獲取所有Visible=true的列,加入到CheckBoxList,並配合Cookie實現本次配置後,下次

GridView獲取隱藏值的詳細總結

這個問題是比較常見的,網上也有不少類似文章,最近做專案也遇到這個問題,這裡在自己分析基礎上,結合實際問題,總結這一問題的幾種解決方案。 問題提出:在使用GridView控制元件時候,往往需要對某一列進行隱藏,而在後臺程式碼中,有時卻又需要這個隱藏列的值來進行一些別的操作,比如我就遇到一個實際問題:控制元件G

【玩轉GridView】之簡單實現隱藏

    做專案中有時候,如果設定了gridview隱藏列,問題就變得很簡單,所以小編總結了兩種實驗過的方法分享給大家。 第一種.     在gridview的RowCreated的方法中設定需要隱藏的

WPF 中隱藏GridView

<Style x:Key="myHeaderStyle" TargetType="{x:Type GridViewColumnHeader}">          <Setter Property="Visibility" Value="Collapsed"

layui表格隱藏的簡單實現方法

需求:渲染表格的時候,比如id在內的一些列是不需要展示給使用者看的,但是在操作表格的時候還需要用得到,這就需要隱藏列 的功能 實現效果:頁面上不顯示,但是能獲取到id的值。 實現方法: table.render({ id:'id', /

重寫listview/gridview 的onMeasure方法,解決與ScrollView的沖突問題

wid 沖突 integer max resp ide @override 固定 width 自定義類繼承listview/gridview 註意item中控件的高要設為固定值 @Overridepublic void onMeasure(int widthMeasure

jquery12 queue() : 隊方法

har set end 列名 () 函數 rip mis 隊列 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; c

jQuery源碼05 (3653 , 3797) queue() : 隊方法 : 執行順序的管理

jquer jquery exp cache 之前 ise 參數 last 匿名 //對外接口 jQuery.extend({ queue: function( elem, type, data ) {//入隊。元素、隊列名字、存進去的函數 //jQuer

用jquery實現隱藏表表單的顯示關閉切換以及Ajax方式改動提交相應的那一行的改動內容。

turn jquery enter lag exit none button inpu ner 請勿盜版,轉載請加上出處http://blog.csdn.net/yanlintao1 請勿盜版,轉載請加上出處http://blog.csdn.net/yanli

Java中成員變量的隱藏方法的重寫

sta diff col mil fat 說了 hide 有道翻譯 例子 首先我們先來看一段非常簡單的代碼: public class ClazzTest { public static void main(String[] args) { Son

頁面文本超出後CSS實現隱藏方法

check -s pac rap mas 頁面 inpu sheet -c text-overflow: ellipsis !important; white-space: nowrap !important; overflow: hidden

【JS】表格獲取每一方法

div 需求 log 物理 語文 array ons 解決 pre 1 var data = [ 2 ["語文", "物理", "數學", "化學"], 3 [120, 88, 132, 80], 4 [128, 95, 145,