好像是在用.NET 2003时,当设置GridView的某一列的Visible=false, 在获取输入时,仍然能够获取到GridView其他隐藏列的值,现在我用的是VS2010,用同样的方法已经获取不到隐藏列的值了,貌似是新的GridView的Visible设置为false时,数据就不一起绑定到前台。采取下面的方法可以解决这个问题。
在创建行的时候,将不需要显示的单元格隐藏,即在RowCreated事件中设置单元格隐藏
protected void grvTest2_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow) //我这里是用的自定义表头,如果是自动生成的表头,需要再判断一下
{
///在绑定时隐藏不需要的列
//注:此种方式隐藏可以获得隐藏列的值
e.Row.Cells[1].Visible = false;
}
}
PS:当在GridView即设置了绑定域(BoundField)又设置了模板列,可以使用以下方法获得模板列中的值
如果BoundField的值为“”则所获得的是 需要过滤掉
protected void grvTest2_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
ArrayList alData = new ArrayList()
for(int i=0;i<grvTest2.Columns.Count; i++)
string x = "TextBox" +(i+1).ToString();//这里只取第一列的值
if (grvTest2.Rows[e.RowIndex].FindControl(x) != null)
{
alData.Add(((TextBox)grvTest2.Rows[e.RowIndex].FindControl(x)).Text.ToString().Trim());
}
else
{
//过滤掉从不可编辑列得来的
alData.Add(grvTest2.Rows[e.RowIndex].Cells[i + 2].Text.Equals(" ") ? string.Empty : grvTest2.Rows[e.RowIndex].Cells[i ].Text.ToString());
}
}