在阅读本文之前,我获取gridview某行某列的值一般做法是这样的:row.Cells[3].Text.ToString()。有点傻瓜呵呵

在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通过隐藏列来绑定键值的做法,显然,现在的方案要优雅的多。

本文来自: IT知道网(http://www.itwis.com) 详细出处参考:http://www.itwis.com/html/net/net20/20081105/2730.html

如何在asp.net中获取GridView隐藏列的值?的更多相关文章

  1. 解决无法获取 GridView 隐藏列值问题

    今天遇到了一个要获取GridView隐藏列值的问题,试了好几种方法,要么获取不到,要么获取到了类列的值也隐藏了,但在样式中这一列会多出一块,,但最后找到了一个功能实现而且实现了列完美隐藏的方法和大家分 ...

  2. ASP.NET中获取Repeater模板列中LinkButton按钮事件中获取ID等

    前台页面中: <asp:Repeater ID="repComment" runat="server">            <ItemTe ...

  3. 如何取得GridView被隐藏列的值

    如何取得GridView被隐藏列的值         分类:             ASP.net              2009-06-25 12:47     943人阅读     评论(1 ...

  4. ASP.NET中获取当日,当周,当月,当年的日期

     ASP.NET中获取当日,当周,当月,当年的日期 在ASP.NET开发中,经常会碰到要获取当日,当周,当月,当年的日期. 以下将源码贴出来和大家分享. aspx中代码如下: <table ce ...

  5. asp.net中获取当前url的方法

    HttpContext.Current.Request.Url.ToString() 并不可靠. 如果当前URL为 http://localhost/search.aspx?user=http://c ...

  6. 如何在ASP.Net中实现RSA加密

    在我们实际运用中,加密是保证数据安全的重要手段.以前使用ASP时,对数据加密可以使用MD5和SHA1算法,这两种算法虽然快捷有效,但是无法对通过它们加密的密文进行反运算,即是解密.因此需要解密数据的场 ...

  7. WPF 中获取DataGrid 模板列中控件的对像

    WPF 中获取DataGrid 模板列中控件的对像 #region 当前选定行的TextBox获得焦点 /// <summary> /// 当前选定行的TextBox获得焦点 /// &l ...

  8. 要在一般处理程序中获取其他页面的session值

    1.要在一般处理程序中获取其他页面的session值,需要引用名空间: using System.Web.SessionState; 2.然后继承一个接口:IRequiresSessionState, ...

  9. sql 中获取最后生成的标识值 IDENT_CURRENT ,@@IDENTITY ,SCOPE_IDENTITY 的用法和区别

    原文:sql 中获取最后生成的标识值 IDENT_CURRENT ,@@IDENTITY ,SCOPE_IDENTITY 的用法和区别 IDENT_CURRENT 返回为任何会话和任何作用域中的指定表 ...

随机推荐

  1. 黑马程序员——【Java基础】——String、StringBuffer和基本数据包装类

    ---------- android培训.java培训.期待与您交流! ---------- 类String---------------------------------------------- ...

  2. Python变量与常量

    变量是计算机内存中的一块区域,变量可以存储规定范围内的值,而且值可以改变.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中.常量是一块只读的内存区域,常量一旦被初始化就不能被 ...

  3. PHP_string

    \n 换行 \r 回车 \t 制表符 \$ 美元符 \0 八进制数 \x 十六进制数 \\ 反斜杠字符

  4. MySQL 全文搜索支持

    MySQL 全文搜索支持 从MySQL 4.0以上 myisam引擎就支持了full text search 全文搜索,在一般的小网站或者blog上可以使用这个特性支持搜索. 那么怎么使用了,简单看看 ...

  5. opencv3.1包安装

    由于之前零零碎碎安装了很多必要的库: 现在只需: (1)下载和解压包 https://github.com/daveselinger/opencv/tree/3.1.0-with-cuda8 这里的分 ...

  6. installshield

    转载出处:海洋女神

  7. 【avalon】parseData

    <div data-a="true" data-b="false" data-d="5" data-e="null" ...

  8. Netty ChannelOption 解释

    Name Associated setter method "writeBufferHighWaterMark" 默认 64 * 1024(用法未知) "writeBuf ...

  9. The implementation of Lua 5.0 阅读笔记(二)

    6 线程和协程 读完这篇文章我才意识到python的协程到底缺了什么,这个就是coroutine和semi-coroutine的区别了.区别就是,semi-coroutine只能返回(yield)到调 ...

  10. tcpdump抓包规则命令大全

    下面的例子全是以抓取eth0接口为例,如果不加”-i eth0”是表示抓取所有的接口包括lo. 1.抓取包含10.10.10.122的数据包 # tcpdump -i eth0 -vnn host 1 ...