隐藏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;