2009-01-06 31 views
1

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

编辑:我试过隐藏的字段选项,但它仍然将值设置为空。我已经看过页面源和隐藏字段存在与适当的值...

+0

任何方式,你可以给我们一些代码,你的GridView和你的代码背后? – 2009-01-06 22:39:26

回答

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时,一列是不可见的该列中的数据绑定失败,但这种方法隐藏后的链路已经建立,因此招数系统(? )。

0

如果你还没有这样做,我会考虑使用模板列的数据和做“手动”数据绑定(使用RowDataBound事件“inline”或在页面后面的代码中)。这样你可以测试DBNull,并且如果值为NULL,那么只需忽略在列中放置一个值。这也将允许列正确隐藏。

+0

你是说如果一列不可见,其默认值为空? – 2009-01-06 15:20:17

0

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

1

Microsoft recommends using the DataKeyNames property GridView控件。

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

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

这样的字段将不会显示给用户但GridView知道保持更新值等。

0

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

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

然后访问它们的细胞值cellValue = GridView1.DataKeys[0]["ID"].ToString();

我写了一个简单的演示后在here解决您的问题。

相关问题