ASP.NET:当列不可见时,GridView值设置为null

时间:2009-01-06 15:02:32

标签: gridview asp.net-2.0

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

编辑:我尝试过隐藏字段选项,但它仍将值设置为null。我查看了页面源,隐藏字段存在适当的值...

5 个答案:

答案 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展示了问题的解决方案。