我正在使用对象列表作为GridView的数据源,当我将列设置为不可见时,更新失败,因为这些列的值更改为null(并且列不允许空值) 。当列可见时,这些值确实存在但我真的不想显示这些列,因为在大多数情况下,它们是用户实际上不需要查看的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建议使用DataKeyNames GridView控件的属性

您可以直接从GridView中删除绑定字段,并在DataKeyNames属性中指定它们,而不是使用代码隐藏来隐藏某些列:

<asp:GridView ID="GridView1" runat="server" 
        DataKeyNames="SalesOrderID,SalesOrderDetailID"
        DataSourceID="LinqDataSource1">

这样,字段不会显示给用户,但GridView知道要保留值以进行更新等。

如果您还没有这样做,我会考虑为您的数据使用模板列,并执行“手动”操作。数据绑定(“内联”或使用RowDataBound事件在页面后面的代码中)。这样,您可以测试DBNull,如果值为NULL,则忽略在列中放置值。这也将允许正确隐藏列。

您可以使用隐藏字段为您不想显示的值执行此操作。这样你仍然可以使用与今天相同的数据绑定和其他功能。

当GridView中的字段不可见时,其单元格值不可访问或者为空或空。

为了解决此问题,您只需通过执行 DataKeyNames =&quot; colName1,colName2,colName3&quot; 将列名称(隐藏字段)分配给GridView的DataKeyNames属性。

然后以 cellValue = GridView1.DataKeys [0] [&quot; ID&quot;]的形式访问其单元格值.ToString();

我在撰写了一篇简短的文章,演示了您的问题的解决方案。这里

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top