【问题标题】:ASP.NET: GridView value set to null when column is not visibleASP.NET:当列不可见时,GridView 值设置为 null
【发布时间】:2009-01-06 15:02:31
【问题描述】:

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

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

【问题讨论】:

  • 有什么方法可以给我们一些代码,包括你的 GridView 和后面的代码?

标签: gridview asp.net-2.0


【解决方案1】:

我发现这个解决方案可以模拟 .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 中,当一列不可见时,该列的数据绑定失败,但此方法在链接建立后隐藏,因此它会欺骗系统 (?)。

【讨论】:

    【解决方案2】:

    GridView 控件的Microsoft recommends using the DataKeyNames property

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 你是说如果一个列是不可见的,它的值默认为null?
      • 不,我是说“自动绑定”需要一个值,如果它遇到 DBNull,它会给你你遇到的问题。即使该列不可见,听起来数据绑定也正在尝试发生。拥有“手动”绑定仍然允许绑定发生,只是没有数据。
      • 数据不是 DBNull 但是当它去更新时,当它们不可见时值是空的(它对隐藏字段做同样的事情)。
      【解决方案4】:

      您可以使用隐藏字段来显示您不想显示的值。这样,您仍然可以像现在一样使用相同的数据绑定和其他功能。

      【讨论】:

        【解决方案5】:

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

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

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

        我在here 上写了一篇简单的帖子来演示您的问题的解决方案。

        【讨论】:

          猜你喜欢
          • 2016-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多