我使用对象列表作为我的 GridView 的数据源,当我将列设置为不可见时,更新失败,因为这些列的值更改为空(并且该列不允许空值)。当列可见时,这些值确实存在,但我真的不想显示这些列,因为在大多数情况下,它们是用户并不真正需要查看的 ID 列。
编辑:我已经尝试了隐藏字段选项,但它仍然将值设置为 null。我查看了页面源,隐藏字段存在并具有适当的值...
我使用对象列表作为我的 GridView 的数据源,当我将列设置为不可见时,更新失败,因为这些列的值更改为空(并且该列不允许空值)。当列可见时,这些值确实存在,但我真的不想显示这些列,因为在大多数情况下,它们是用户并不真正需要查看的 ID 列。
编辑:我已经尝试了隐藏字段选项,但它仍然将值设置为 null。我查看了页面源,隐藏字段存在并具有适当的值...
我发现这个解决方案可以模拟 .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 中,当一列不可见时,该列的数据绑定失败,但此方法在链接建立后隐藏,因此它会欺骗系统(?)。
Microsoft 建议使用 GridView 控件的 DataKeyNames 属性。
您可以从 GridView 中删除绑定字段并在 DataKeyNames 属性中指定它们,而不是使用代码隐藏来隐藏某些列:
<asp:GridView ID="GridView1" runat="server"
DataKeyNames="SalesOrderID,SalesOrderDetailID"
DataSourceID="LinqDataSource1">
这样,字段不会显示给用户,但 GridView 知道要保留这些值以进行更新等。
如果您还没有这样做,我会考虑为您的数据使用模板列并执行“手动”数据绑定(“内联”或使用 RowDataBound 事件在页面后面的代码中)。这样,您可以测试 DBNull 并在值为 NULL 时简单地忽略将值放入列中。这也将允许正确隐藏列。
您可以使用隐藏字段来显示您不想显示的值。这样,您仍然可以像今天一样使用相同的数据绑定和其他功能。
当 GridView 中的字段变为不可见时,其单元格值无法更容易访问,或者这些值为 null 或空。
为了解决这个问题,您只需通过执行将列名(隐藏字段)分配给 GridView 的 DataKeyNames 属性DataKeyNames="colName1,colName2,colName3"
。
然后访问它们的单元格值cellValue = GridView1.DataKeys[0]["ID"].ToString();
我在这里写了一篇简单的文章来演示您的问题的解决方案。