zoukankan      html  css  js  c++  java
  • 取得GridView被隐藏列的值方法集合

    经常看到有人问“如何取得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;//再把绑定行栏位隐藏
                }

     

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

  • 相关阅读:
    Codeforces 722C. Destroying Array
    Codeforces 722D. Generating Sets
    【BZOJ】3436: 小K的农场
    数论四·扩展欧几里德
    数论三·约瑟夫问题
    数论二·Eular质数筛法
    #1287 : 数论一·Miller-Rabin质数测试
    树的维护
    可持久化线段树
    【NOIP2016】天天爱跑步
  • 原文地址:https://www.cnblogs.com/chehaoj/p/2723926.html
Copyright © 2011-2022 走看看