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

ASP.NET:当列不可见时,GridView值设置为null,gridview,asp.net-2.0,Gridview,Asp.net 2.0,我使用对象列表作为GridView的数据源,当我将列设置为不可见时,更新失败,因为这些列的值更改为null(并且该列不允许null)。当列可见时,这些值确实存在,但我确实不想显示这些列,因为在大多数情况下,它们是用户不需要看到的ID列 编辑:我尝试了隐藏字段选项,但它仍然将值设置为null。我已经查看了页面源,隐藏字段以适当的值存在。如果您还没有这样做,我会考虑为您的数据使用模板列,并执行“手动”数据绑定(“内联”或使用ROWDATABONG事件在代码隐藏页中)。这样,您就可以测试DBNull,

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


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

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

< P>如果您还没有这样做,我会考虑为您的数据使用模板列,并执行“手动”数据绑定(“内联”或使用ROWDATABONG事件在代码隐藏页中)。这样,您就可以测试DBNull,如果值为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;
}
以下是链接:


我猜在2.0中,当一列不可见时,该列的数据绑定失败,但此方法在链接建立后隐藏,因此会欺骗系统(?)。

我发现此解决方案用于模拟.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;
}
以下是链接:

我猜在2.0中,当一列不可见时,该列的数据绑定失败,但该方法在链接建立后隐藏,因此它欺骗了GridView控件的系统(?)

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

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

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

GridView控件

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

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


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

当GridView中的字段不可见时,其单元格值将无法访问,或者这些值为null或空

为了解决这个问题,只需通过执行
DataKeyNames=“colName1,colName2,colName3”
将列名(隐藏字段)分配给GridView的DataKeyNames属性

然后以
cellValue=GridView1.DataKeys[0][“ID”].ToString()的形式访问它们的单元格值


我已经写了一篇简单的帖子,展示了你的问题的解决方案

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

为了解决这个问题,只需通过执行
DataKeyNames=“colName1,colName2,colName3”
将列名(隐藏字段)分配给GridView的DataKeyNames属性

然后以
cellValue=GridView1.DataKeys[0][“ID”].ToString()的形式访问它们的单元格值


我已经写了一篇简单的帖子,展示了你的问题的解决方案

你是说如果一个列是不可见的,它的默认值是null吗?不,我是说“自动绑定”需要一个值,如果它遇到DBNull,它会给你带来问题。听起来,即使列不可见,数据绑定也在尝试进行。使用“手动”绑定仍然会允许绑定发生,只是没有数据。数据不是DBNull,但当数据更新时,值在不可见时为null(对隐藏字段也是如此)。你是说如果列不可见,其默认值为null吗?不,我是说“自动绑定”需要一个值,如果遇到DBNull,它会给您带来问题。听起来,即使列不可见,数据绑定也在尝试进行。使用“手动”绑定仍将允许绑定发生,只是没有数据。数据不是DBNull,但当数据更新时,值在不可见时为null(对隐藏字段也是如此)。您可以通过任何方式为我们提供一些代码,包括GridView和代码隐藏?您可以通过任何方式为我们提供一些代码,你的GridView和你的代码都隐藏了吗?