在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中使用隐藏列并能够进行取值,我上面的方法不防一试,虽然我很难想到有这样的需求^_^

转载于:https://www.cnblogs.com/greateast/archive/2007/04/11/709273.html

引用 一个较优雅的GridView隐藏列取值解决方案相关推荐

  1. GridView隐藏列取值解决方案

    [摘要] 在Asp.net 2.0中增加了一个新的数据绑定控件:GridView,其目的用来取代Asp.net1.x中的DataGrid控件,但有一点很不爽的是,如果把某列设置为visible=fal ...

  2. GridView隐藏列, 并能读取列值的解决方法(转载)

    首先 是用datakeynames 来解决 在设计数据库的时候 ,,我这里 aa 为主键. 前台 代码 <asp:GridView ID="GridView1" runat= ...

  3. Gridview隐藏列和隐藏列的取值问题

     总结一下Gridview隐藏列的问题,下面说两种方法:         就是直接让你得到的数据表里面的那一列不给他绑定值.确保你Table里面包含这列数据,比如把你要查询出来两列:name:id,你 ...

  4. 【web开发】☆★之利用POI操作Excel表格系列教程【6】遍历工作簙行和列取值

    [web开发]☆★之利用POI操作Excel表格系列教程[6]遍历工作簙行和列取值 package com.xiaoye.demo; import java.io.FileInputStream; i ...

  5. 获取GridView隐藏列值

    经过试验是不是成功的!! 对于想隐藏GridView列时,大家一定现想到visible属性及Visible = false的时候,但是这样就会发现,我们无法去到该列的值,下面介绍一种方法,及通过 Da ...

  6. datatable隐藏列设置及获取隐藏列的值

    原文:原文链接 设置隐藏列: "columns": [ { "data": "name" }, { "data": &q ...

  7. GridView单元格取值显示为nbsp;

    在通过GridView取一个单元格(cell)的值时,数据库中为NULL,而页面上显示为空格.发现通过gridview.cell[i].text取出来的值为 ,导致获取数据出现问题. 解决方法: 一. ...

  8. span标签显示、隐藏、取值、赋值

    1.隐藏 <span id='span_node_'+id></span> (1)$('#span_node_'+id).hide();(2)$('#span_node_'+i ...

  9. Gridview 隐藏列

    protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)     {         if (e.Row.R ...

最新文章

  1. 卡内基梅隆大学的研究人员提出新的源定位算法: SilenceMap,寻找大脑的静默区域...
  2. linux samba 空目录,linux Samba搭建
  3. js验证开始日期不能大于结束日期_Excel之日期与时间函数YEAR/MONTH/DAY/DATE/DATEFIF...
  4. 一个实际的sonar代码检查的配置文件
  5. matlab画线不同颜色_怎样画线框图才有意义
  6. YII2.0之博客实战
  7. python的开发环境包括_下搭建 Python 开发环境
  8. TypeError: descriptor '__init__' requires a 'super' object but received a 'str'
  9. myeclipse6_snv
  10. LaTeX中的魔法注释
  11. 信息论基础(考试复习,针对考点)
  12. angular 点菜_Vue2与Angular5实现无人点餐、无人收银系统项目实战视频教程【组合套餐】(大地)...
  13. lpx寒假作业案例15
  14. 就计算机应用领域而言航天器,婴幼儿耳道长耵聍,应该用()工具取出A.耳挖勺B.火柴棍C.棉签D.卡子...
  15. 移动硬盘格式化后还能恢复数据吗 格式化的移动硬盘数据能恢复吗
  16. 给虚拟机下载安装jdk,hadoop等(非常详细的步骤)
  17. 最简明扼要的 Systemd 教程,只需十分钟
  18. Java方法 的学习
  19. 如何消除苹果Mac电脑开机声音
  20. 使用Canvas把照片转换成素描画

热门文章

  1. python 平方根_数的Python平方根
  2. Python字符串endswith()
  3. 熊猫Pivot_table()– DataFrame数据分析
  4. linux压缩命令gzip_Linux gzip命令示例
  5. android学习笔记_Intent
  6. js 判断各种数据类型
  7. Oracle 索引的失效检查
  8. CetnOS 6.7安装Hive 1.2.1
  9. Android Studio IDE Out of Memory
  10. Linux中的常用命令