我正在使用对象列表作为GridView的数据源,当我将列设置为不可见时,更新失败,因为这些列的值更改为null(并且列不允许空值) 。当列可见时,这些值确实存在,但我真的不想显示这些列,因为在大多数情况下,它们是用户实际上不需要查看的ID列。
编辑:我尝试过隐藏字段选项,但它仍将值设置为null。我查看了页面源,隐藏字段存在适当的值...
答案 0 :(得分:3)
我发现这个解决方案可以模拟.Net 2.0中的隐藏列:
实施GridView.RowCreated事件。
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[1].Visible = false;
e.Row.Cells[2].Visible = false;
}
以下是链接: http://www.beansoftware.com/ASP.NET-Tutorials/GridView-Hidden-Column.aspx
我想在2.0中,当列不可见时,该列的数据绑定失败,但是这个方法在链接建立后隐藏,因此它欺骗了系统(?)。
答案 1 :(得分:1)
Microsoft recommends using the DataKeyNames property GridView控件。
您可以直接从GridView中删除绑定字段,并在DataKeyNames属性中指定它们,而不是使用代码隐藏来隐藏某些列:
<asp:GridView ID="GridView1" runat="server"
DataKeyNames="SalesOrderID,SalesOrderDetailID"
DataSourceID="LinqDataSource1">
这样,字段不会显示给用户,但GridView知道要保留值以进行更新等。
答案 2 :(得分:0)
如果您还没有这样做,我会考虑使用模板列作为您的数据并进行“手动”数据绑定(“内联”或使用RowDataBound事件在页面后面的代码中)。这样,您可以测试DBNull,如果值为NULL,则忽略在列中放置值。这也将允许正确隐藏列。
答案 3 :(得分:0)
您可以使用隐藏字段为您不想显示的值执行此操作。这样你仍然可以使用与今天相同的数据绑定和其他功能。
答案 4 :(得分:0)
当GridView中的字段不可见时,其单元格值不可访问或者为空或空。
为了解决此问题,您只需通过执行DataKeyNames="colName1,colName2,colName3"
将列名称(隐藏字段)分配给GridView的DataKeyNames属性。
然后将其单元格值作为cellValue = GridView1.DataKeys[0]["ID"].ToString();
我写了一篇简单的文章,在here展示了问题的解决方案。