DataKeyNames表示主键的列名,可以通过GridViewEntity.DataKeys[RowIndex]["ColumsName"]来获取他的值,当然它是不会显示出来的,其实我是在一个用SqlDataSource中发现的,看到了有这么一个主键而实现更新,当然在我们多层开发中也不能缺少这个。当我们在用Template时怎么取得值呢?我们可以把那个列也设为DataKeyNames中,记得多个要用","隔开。

如果没有设置成DataKeyNames,那只能通过GridViewEntity.Rows[RowIndex].Cell[Index].Text来得到值了,不知老兄有没有看到一些HTML字符呢? 这个最是经常见得了,不用当心我们可以用HttpUnility.HtmlDecode()来解决他!

在我们使用GridView的过程中,经常会遇到这样对问题,我们选择某一行进行编辑,或选择某一行删除或者.......时,我们需要获取当前行的某些信息,尤其是当前行的主键信息,主键信息一般不显示在页面,此时我们有三种方法来处理。
第一种是使用DataKeyNames ,这里要重点介绍的。
第二种是使用按钮的CommandArgument属性邦定需要的信息。
第三种是最古老最通用的方法使用隐藏的方法显示。

第一种方法:使用DataKeyNames,DataKeyNames可邦定一列,也可邦定多列
前台:DataKeyNames="FID"   绑定一个值
后台:GridView1.DataKeys[e.Row.RowIndex].Value.ToString();

前台:DataKeyNames="FID,FName"   绑定两个值
后台:GridView1.DataKeys[e.Row.RowIndex].Values[0].ToString();
后台:GridView1.DataKeys[e.Row.RowIndex].Values[1].ToString();
或者
后台:GridView1.DataKeys[e.Row.RowIndex].Values["FID"].ToString();
后台:GridView1.DataKeys[e.Row.RowIndex].Values["FName"].ToString();

第二种方法:是用按钮的CommandArgument属性邦定需要的信息。

典型的例子:下载附件列(有附件的显示下载链接,无附件的显示为空)
<asp:TemplateColumn HeaderText="附件">
<HeaderStyle Width="7%"></HeaderStyle>
<ItemTemplate>
<asp:LinkButton id="LinkButton1" CommandName="download" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "attached_file")%>' runat="server" Visible='<%# ((DataBinder.Eval(Container.DataItem, "attached_file").ToString()) != "") %>'>下载</asp:LinkButton>
</ItemTemplate>
</asp:TemplateColumn>

在dgHKStock_ItemCommand事件中:
if ("download" == e.CommandName)
{
    mybc.SystemOverTime0();          // 判断Session是否过期
    mybc.RightManage("16010500");    // 判断用户是否有打开此网页的权限
    mybc.HTTP_DownloadFile(e.CommandArgument.ToString()); // 取得当前存货信息的附件存放路径

}

最古老最通用的方法使用隐藏的方法显示。

<style type="text/css">
    .test{
        display:none;
    }
    </style>

<asp:TemplateField HeaderText="姓名" SortExpression="name" ItemStyle-CssClass="test" HeaderStyle-CssClass="test">
  <ItemTemplate>
   <asp:Label ID="Label1" runat="server" Text='<%# Eval("name") %>' ></asp:Label>
   </ItemTemplate>
  </asp:TemplateField>

把隐藏列转成模版列,通过FindControl访问模版列的内容:

<asp:TemplateField Visible="false">
                <ItemTemplate>
                <asp:Label runat="server" Text='<%#Eval("id") %>' ID="lblId"></asp:Label>
                </ItemTemplate>
</asp:TemplateField>

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        Label lblId=GridView1.Rows[e.NewEditIndex].Cells[0].FindControl("lblId") as Label;
        Response.Write(lblId.Text);
    }

转载于:https://www.cnblogs.com/jhxk/articles/1602363.html

GridView的DataKeyNames属性(转)相关推荐

  1. GridView的DataKeyNames属性 转载的

    偶今天用到这个了,转载  "事在人为"楼主的,原文地址: http://www.cnblogs.com/andhm/archive/2010/05/07/1730024.html ...

  2. 【转】GridView的DataKeyNames的一些用法

    [转]GridView的DataKeyNames的一些用法 (2012-07-25 17:45:46) 转载▼ 标签: 杂谈 分类: 数据绑定控件使用 页面前台有以下代码: <asp:GridV ...

  3. 动态生成GridView时,加入DataKeyNames属性,回调时出错解决方法

    早上看到有位同学问关于自动生成GridVie并且添加DataKeyNames属性后 回调页面时,出现错误异常.下面是我实现的方法.注意一点.就是数据绑定的时间. 要是先绑定,再添加到div1中,回调页 ...

  4. Gridview利用DataFormatString属性设置数据格式

    首 先把Gridview的AutoGenerateColumns属性设为False(默认是False),DataField选择相应的字段,特别需要注 意的是要把需要设置的字段的HtmlEncode属性 ...

  5. 【Vegas原创】GridView设定DataFormatString属性失效的解决方法

    我给GridView控件的各个BoundField数据行设定了DataFormatString属性,但是没有任何效用. 解决方法:将BoundField数据行的HtmlEncode属性设定成False ...

  6. 转 C# GridView中DataFormatString属性的取值

    DataFormatString 属性语法如下: DataFormatString="{0:格式字符串}" 我们知道在DataFormatString 中的 {0} 表示数据本身, ...

  7. dev 获取gridview没有rows属性_虚拟黑群晖不直通也可以获取到SMART?

    黑群晖的用户,都有一个痛点,那就是访问硬盘的SMART信息! SMART是什么? SMART并不是它字面的意思:聪明.而是Self-Monitoring, Analysis and Reporting ...

  8. FineUI Grid DataKeyNames属性

    DataKeyNames 行关键字段  DataIFrameUrlFields 用于url后面传值 <f:Grid ID="Grid2" Title="Grid2& ...

  9. GridView控件的DataKeyNames

    自己之前在用GridView的时候也遇到不知道怎么取行值的问题,今天看到这位仁兄的介绍,感觉挺不错,所以就转载学习了. 页面前台有以下代码: <asp:GridView ID="Vie ...

  10. GridView控件当前行索引RowCommand和主键DataKeyNames应用

    在用GridView控件时,我们经常会碰到获取当前行的索引,通过索引进行许多操作.例如,可以获得当前行某一个控件元素:设置某一元素的值等等. 下面结合实例介绍几种获得GridView当前行索引值的方法 ...

最新文章

  1. 集结最优秀同行,智源面向全球诚邀研究人才加入
  2. CISSP考前总复习
  3. 《Java 核心技术卷1 第10版》学习笔记------ Object类的 hashCode 方法
  4. HTML5-寻路跟踪
  5. Python Pycharm Anacanda 区别
  6. 微软Vista今起大幅降价 最高幅度达到千元
  7. 盘点数据处理工具,手把手教你做数据清洗和转换
  8. python 不等于_python怎么一次输入两个数
  9. fetchtype 动态控制_hibernate 中 fetch=FetchType.LAZY 懒加载失败处理方法
  10. 编码基本功:工作中,大多数人不会举一反三
  11. 自备一个刷BIOS神器
  12. 访问ftp服务器网页,访问ftp服务器是网页
  13. prometheus 阿里云短信告警
  14. Sublime Text 4 首个稳定版终于来了:支持 GPU 渲染、兼容旧版本、Python API 升级
  15. 做表情包就能卖1亿刀,这事儿放在国内我是不信的
  16. 计算机三级网络技术需要考二级什么,考计算机三级要先考二级吗?计算机三级的考试内容是什么?...
  17. ASP.NET失物招领网站包含(寻物启事+感谢信+通知公告)c#开发
  18. 根据离散点画直线,iOS离散点画曲线
  19. 关于vs重新生成出现“错误 CS2001: 未能找到源文件”
  20. 【调剂】关于安徽工程大学2022年硕士研究生招生相关问题答考生问

热门文章

  1. DevExpress DateEdit控件选择精确到秒
  2. 部分手机浏览器存在将ajax请求当成广告过滤的情况,及解决方案
  3. 04、自学——计算机网络学习任务与进度(物理层)
  4. 给对象添加属性和给对象原型添加属性的区别
  5. 世界编程大赛第一名编写的程序-3D世界
  6. 您试图打开的项目是WEB项目,需要通过指定其Url路径来打开它
  7. Raspbian 2019-06-20 发布
  8. python基本数据类型和简单用法
  9. greenplum数据库建表及分区
  10. python引入pytesseract报错:ValueError: Attempted relative import in non-package