博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
取得GridView被隐藏列的值方法集合
阅读量:4319 次
发布时间:2019-06-06

本文共 2691 字,大约阅读时间需要 8 分钟。

经常看到有人问“如何取得GridView被隐藏列的值?”,当GridView列使用了Visible=false时,数据就不会被加载到表格中了,自然也取不到值了。但是我们就是想要取这个隐藏列的值该怎么办呢?通常我的作法是把该隐藏值设置为主键,然后再获得,但是有时候不想设置成主键了?不急,想想方法总比问题多。 总结有以下几种方法:

一: 主键解决

设置GridView你需要隐藏的字段 Visible=false,再设定GridView的DataKeyNames="你想要隐藏的列ID"。例如: 
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="EmployeeID" DataSourceID="SqlDataSource1" >

<Columns> 

<asp:BoundField DataField="EmployeeID" HeaderText="UserID" ReadOnly="True" SortExpression="EmployeeID" Visible ="false" />
<asp:BoundField DataField="age" HeaderText="age" SortExpression="age" />

</Columns>  

</asp:GridView>

或者cs设置: GridView1.DataKeyNames = new[] {"EmployeeID"};//单个主键可 var keyId=GridView1.DataKeys[e.RowIndex].Value.ToString()

多主键值: GridView1.DataKeyNames = new[] {"EmployeeID,UserID"};//获取var keyId=GridView1.DataKeys[e.RowIndex]["EmployeeID"].ToString()

二:CSS解决

设置一个Css类: 
 .hidden { display:none;} 
随后在GridView的列编辑对话框中,对需要进行隐藏的列进行设置,分别设置FootStyle,HeaderStyle,ItemStyle的CssClass属性为“hidden” Ok,这样我们就实现了隐藏列的目的,同时又能保证对其进行数据绑定。 
  
三: 编码解决
1)  在GridView中设置该列的Visible为True,然后在RowCreated事件中设置隐藏,这样就能取到隐藏列的值了。例如:

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)    

{         

    if (e.Row.RowType == DataControlRowType.DataRow || e.Row.RowType == DataControlRowType.Header)                            

    { 

       e.Row.Cells[0].Visible = false;              

     }     

 } 

然後在RowDataBound事件中,一樣可以利用Row.Cells的方式找到它

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 

    { 

        if (e.Row.RowType == DataControlRowType.DataRow) 

        { 

           string aa = e.Row.Cells[1].Text; 

        } 

    } 

原因很简单因为RowCreated事件在DataBinding事件之后所以它在bind以後才被隐藏所有你在RowDataBound就可以找到数据了。

2) 第二种方法看起来似乎比第一种方法好(此方法本人没验证过,是他人的使用方法)

直接在.ASPX里面把某个值设置隐藏(Visible = False),然後直接指定DataItem的方式去找到它,需要在RowDataBound事件写以下code

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 

    { 

        if (e.Row.RowType == DataControlRowType.DataRow) 

        { 

             Boolean draft = Convert.ToBoolean(DataBinder.Eval(e.Row.DataItem, "draft")); 

            if (draft == true

                e.Row.ForeColor = System.Drawing.Color.Green; 

        } 

    } 

以上的code是把draftx栏位转换成布尔值,然后判断去对该ROW

3)此外还有第三种方法:

在Gridview的RowDataBound事件下写如下CODE:

 if(e.Row.RowType==DataControlRowType.Header)            {                e.Row.Cells[6].Visible = false;//先设置需要隐藏的头部栏位            }            if(e.Row.RowType==DataControlRowType.DataRow )            {                var nstatus = DataBinder.Eval(e.Row.DataItem, "nstatus").ToString();//这是Cells[6]对应的绑定字段                 if(nstatus=="1") //1 for 3 month range                {                    e.Row.Cells[3].ForeColor = Color.Blue;                 }                e.Row.Cells[6].Visible = false;//再把绑定行栏位隐藏            }

 

至于以上方法先后顺序,纯看个人喜好了。

转载于:https://www.cnblogs.com/chehaoj/archive/2012/10/15/2723926.html

你可能感兴趣的文章
oracle的级联更新、删除
查看>>
多浏览器开发需要注意的问题之一
查看>>
Maven配置
查看>>
HttpServletRequest /HttpServletResponse
查看>>
SAM4E单片机之旅——24、使用DSP库求向量数量积
查看>>
从远程库克隆库
查看>>
codeforces Unusual Product
查看>>
hdu4348 - To the moon 可持久化线段树 区间修改 离线处理
查看>>
springMVC中一个class中的多个方法
查看>>
Linux系统安装出错后出现grub rescue的修复方法
查看>>
线段树模板整理
查看>>
[iOS问题归总]iPhone上传项目遇到的问题
查看>>
Python天天美味(总) --转
查看>>
Spring Framework tutorial
查看>>
【VS开发】win7下让程序默认以管理员身份运行
查看>>
【机器学习】Learning to Rank 简介
查看>>
Unity 使用实体类
查看>>
MySQL常见注意事项及优化
查看>>
流畅的Python (Fluent Python) —— 前言
查看>>
Jquery-menu-aim流畅的菜单滑动体验
查看>>