隐藏BoundField但仍能用C#获取值

我有一个网格视图,并使用各种数据:

        

最后两列我不想显示,我正在使用它,所以我可以用这个C#代码检索主键:

  string dailyTaskHoursPK = (string)e.Values["PK_DailyTaskHours"].ToString(); string nonScrumStoryPK = (string)e.Values["PK_NonScrumStory"].ToString(); SqlDataSource4.DeleteParameters["dailyTaskHoursPK"].DefaultValue = dailyTaskHoursPK; SqlDataSource4.DeleteParameters["nonScrumStoryPK"].DefaultValue = nonScrumStoryPK; 

但是,我不想显示最后两列。 但是当我设置:

 Visible="false" 

并尝试运行该程序,我收到以下错误:

你调用的对象是空的。

描述:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

exception详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。

我究竟做错了什么? 如何阻止用户看到这些字段?

Trevor是正确的,您需要在DataGrid标记中设置这样的DataKeyNames

  

完成此操作后,您可以将值作为字符串返回:

  protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { string dailyTaskHoursPK = GridView1.DataKeys[0].Values["PK_DailyTaskHours"].ToString(); string nonScrumStoryPK = GridView1.DataKeys[0].Values["PK_NonScrumStory"].ToString(); } 

尝试让它们Visible =“true”,但用css隐藏它们。

  ...       

您还必须设置数据绑定控件的DataKeyNames属性。 将visible设置为false将导致不将字段发送到客户端,除非在DataKeyNames属性中指定了该字段。 请参阅DataControlField.Visible属性上的msdn页面。

如果要隐藏列并获取其值,请在aspx页面中为GridView指定DataKeyNames属性。

  

然后,您可以在后面的代码中检索该列值,如下所示。

 string showId = (string) GridView1.DataKeys[6].Value.ToString(); 

上面的代码隐藏了BoundField值,但没有隐藏headertext和miss匹配所有列,所以我会改变一些belove

   

   

现在这是正确的工作

尝试使用font-size逻辑使用

例如

 grid.Columns[0].HeaderStyle.Font.Size = grid.Columns[0].ItemStyle.Font.Size = 0;