如何获取gridview隐藏列的值
如何获取gridview隐藏列的值方法一:利用新的属性DataKeys和DataKeyNames
针对GridView无法提供行主键的问题,它提供了两个全新的属性:DataKeys和DataKeyNames!
其SDK中的描述如下:
DataKeyNames:获取或设置一个数组,该数组包含了显示在 GridView 控件中的项的主键字段的名称。
DataKeys:获取一个 DataKey 对象集合,这些对象表示 GridView 控件中的每一行的数据键值。
也就是说,利用DataKeyNames,可以设置一个多个列,用于作为行的主键字段(这里用主键其实不太合适,因为值时允许重复的),之后利用DataKeys旧可以访问这些列的值了。因此,利用这两个新属性,我们就可以继续使用利用列的Visible属性设置来隐藏列的同时,又可以访问隐藏列的值了。
代码如下:
GV.Columns[5].Visible = false;//设置第6列为隐藏
//只需要在设置列为隐藏的地方多加一段代码:
GV.DataKeyNames = new string[] { "stateid_O2" };
//假设第六列的列名为stateid_O2
protected void GV_UpdateData_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (GridView_UpdateData.DataKeys[e.Row.DataItemIndex]["stateid_O2"].ToString() == "1") //利用这个DataKeys属性来访问隐藏列的值
{
e.Row.Cells[2].BackColor = System.Drawing.Color.Red;//设置行中第三个单元格背景色为红色
}
}
方法二:利用客户端代码来隐藏列
实际上,我们上面都是在服务器端利用各种方法来隐藏列了,那么这种方法就是服务器端不对列的可见性进行设置,那么显然就不存在无法取值的问题了,那么又要让用户不看到某些列,这就需要客户端的代码css来实现隐藏效果了。可以从上面方法推导出,既可以用css直接隐藏列,也能通过隐藏列的单元格来实现。
首先需要一个css:
<style type="text/css">
.hidden { display:none;}
</style>
随后在GridView的列编辑对话框中,对需要进行隐藏的列进行设置,分别设置FootStyle,HeaderStyle,ItemStyle的CssClass属性为“hidden” Ok,这样我们就实现了隐藏列的目的,同时又能保证对其进行数据绑定。
方法三:在GridView控件RowCreated事件中设置隐藏
在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[1].Visible = false;
}
}