GridView隐藏列取值解决方案

原创 2007年09月13日 15:47:00
在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键值,注意该索引即行的索引,从headerfooter都算在内
string id=GridViews1.DataKeys[i]["id"].ToString();
//通过键值对数据进行处理……
由此可见,GridView提供了新的机制来绑定额外的数据到每一行。这使得可以完全放弃原来DataGrid通过隐藏列来绑定键值的做法,显然,现在的方案要优雅的多。当然,如果你实在需要在GridView中使用隐藏列并能够进行取值,我上面的方法不防一试,虽然我很难想到有这样的需求^_^
 

GridView隐藏列取值解决方案

【摘要】  在Asp.net 2.0中增加了一个新的数据绑定控件:GridView,其目的用来取代Asp.net1.x中的DataGrid控件,但有一点很不爽的是,如果把某列设置为visible=f...
  • junboyboy
  • junboyboy
  • 2014年03月02日 13:38
  • 953

【整理】C#中GridView隐藏指定列的方法

试了好几种方法,总算成功了。 (1)在GridView的标签处设置OnRowCreated="GridView1_RowCreated" ; (2)在RowCreated事件中书写如下代码   ...
  • brk1985
  • brk1985
  • 2014年12月31日 15:30
  • 2433

ASP.NET GridView动态显示隐藏列,并保存客户的配置(用户控件Cookie版)

新建用户控件GridViewLayout.ascx
  • qq285679784
  • qq285679784
  • 2017年04月21日 20:25
  • 758

jquery.dataTables表格列动态显示隐藏封装(二)

jquery.dataTables 列动态显示隐藏
  • weiyongliang_813
  • weiyongliang_813
  • 2015年05月24日 21:51
  • 7677

bootstrap获取隐藏列值

好久没有写博客了吧,因为最近项目真的很多啊,每天工作一个接一个,都没有自己的时间了,现在周五临下班前终于把自己本周的工作做的差不多了,可以总结下最近开发遇到的问题了。 最近在负责的项目是一个关于视频监...
  • MonkeyKingBi
  • MonkeyKingBi
  • 2017年07月21日 17:17
  • 1845

关于GridView点击列头排序

关于GridView列头点击排序 做ASP.NET Web项目开发,经常会和GridView打交道,免不了会根据需求要有列头点击排序的功能,在网上看了很多资料都没有把实例讲全,下面以linq原生语法...
  • moshansk
  • moshansk
  • 2013年10月28日 09:45
  • 2136

固定GridView标题栏,冻结列功能实现

protected void Page_Load(object sender, EventArgs e) { DataTable t = new DataTable(); ...
  • smartsmile2012
  • smartsmile2012
  • 2015年03月17日 11:54
  • 3343

GridView拖动改变列宽、列顺序、列排序

GridView鼠标拖动改变列宽、列顺序、列排序、行样式。 鼠标停留在GridView行改变背景颜色,单击改变背景颜色,奇偶行背景颜色。 本案例数据库采用xml文档,GridView列、行特效的实现是...
  • lovegonghui
  • lovegonghui
  • 2015年11月13日 11:35
  • 1128

GridView实现列显示或隐藏

解决GridView多表头的列显示与隐藏
  • wupd2014
  • wupd2014
  • 2015年08月07日 13:54
  • 218

如何获取GridView隐藏列的值

在使用GridView控件时候,往往需要对某一列进行隐藏,而在后台代码中,有时却又需要这个隐藏列的值来进行一些别的操作,比如我就遇到一个实际问题:控件GridView的ID为GV,其中某一列X(X为索...
  • guoguiyang
  • guoguiyang
  • 2013年06月24日 10:35
  • 264
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GridView隐藏列取值解决方案
举报原因:
原因补充:

(最多只允许输入30个字)