取得GridView被隐藏列的值方法集合
2012-10-15 10:51 时空印记 阅读(3231) 评论(0) 编辑 收藏 举报经常看到有人问“如何取得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;//再把绑定行栏位隐藏
}
至于以上方法先后顺序,纯看个人喜好了。