C# 从Gridview的可见假边界字段检索数据
我在C# 从Gridview的可见假边界字段检索数据,c#,gridview,boundfield,rowcommand,C#,Gridview,Boundfield,Rowcommand,我在GridView <asp:BoundField DataField="ReportId" HeaderText="RId" Visible="false" /> 但是,如果我将BoundField的.Visible属性更改为true尝试使用客户端html来隐藏这样的想法,它将返回正确的值 <style type="text/css"> .hidden { display:none; } </style>
GridView
<asp:BoundField DataField="ReportId" HeaderText="RId" Visible="false" />
但是,如果我将
BoundField的
.Visible
属性更改为true
尝试使用客户端html来隐藏这样的想法,它将返回正确的值
<style type="text/css">
.hidden
{
display:none;
}
</style>
<asp:BoundField DataField="ReportId" HeaderText="RId" HeaderStyle-CssClass="hidden" >
</asp:BoundField>
.隐藏
{
显示:无;
}
据我所知,当您将绑定字段设置为不可见时,则无法访问它。尝试使用TemplateField,我也遇到了同样的问题
有趣的是,DataGrid不会有这个问题,它允许您访问隐藏列中的数据,即使它甚至没有在客户端中呈现这些数据,因为它仍然会将隐藏列的信息添加到ViewState中
另一方面,即使将EnableViewState属性设置为true,GridView也会忽略隐藏字段。唯一的方法是将信息保留在那里,以便客户端使用样式属性隐藏,如display:none
不幸的是,我喜欢DataGrid在这方面的表现,但GridView还有其他优势。尽管这是一个一年前的问题(事实上正好是一年前的问题),但这里有另一个不使用CssClass的解决方法 在数据绑定之后,将所需列的可见性设置为false
gridview1.databind()
gridview1.columns(i).Visibile = False
这将在viewstate中维护数据,但不会为页面创建标记。如果GridView列被标记为不可见,则在运行时不会填充该列,因此它不会返回任何内容。因此,我只是从绑定到Gridview的DataView填充了超链接,并记住将DataView声明为共享 我在VB asp.net中为GridView做了这项工作,GridView从日历数据库中查找搜索到的事件 这对我来说太棒了
Private Sub GridView1_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If (e.Row.RowType = DataControlRowType.DataRow) Then
Dim ThisHyperLink As HyperLink = e.Row.Cells(0).Controls(0)
Dim drvRow As DataRowView = dvFoundEvents.Item(e.Row.DataItemIndex)
EventID = drvRow("EventID")
ThisHyperLink.NavigateUrl = "<URL>?id=" + EventID
End If
End Sub
Private子GridView1\u RowDataBound(发送者作为对象,e作为System.Web.UI.WebControl.GridViewRowEventArgs)处理GridView1.RowDataBound
如果(e.Row.RowType=DataControlRowType.DataRow),则
将此超链接设置为HyperLink=e.Row.Cells(0)。控件(0)
Dim drvRow As DataRowView=dvFoundEvents.Item(e.Row.DataItemIndex)
EventID=drvRow(“EventID”)
ThisHyperLink.NavigateUrl=“?id=“+事件id”
如果结束
端接头
这对我很有用:
如果列是网格上的命名DataKeyValue,则可以将行中发送的e.Item转换为DataGridItem并调用其DataKeyValue。您需要将其转换为Int、String或其他格式,但即使列为visible=false,它也会存在。在rowDataBound事件中,您可以使用以下方式访问字段的值:
(((DataRowView)e.Row.DataItem)["your_boundField_dataFieldName"]).ToString();
即使您的boundfield可见性设置为false。第一个解决方案工作正常,但必须添加标题样式以隐藏此列的标题
gridview1.databind()
gridview1.columns(i).Visibile = False
<style type="text/css">
.hidden
{
display:none;
}
</style>
<asp:BoundField DataField="ReportId" HeaderText="RId" >
<ItemStyle CssClass="hidden"/>
<HeaderStyle CssClass="hidden"/>
</asp:BoundField>
.隐藏
{
显示:无;
}
我认为一些优化是在幕后进行的,绑定在可见之前不会真正发生。您可以尝试使用简单的html样式显示吗none@lc. 我只是以正常的方式绑定数据源。也没有太多的Gridview经验。Visible=“false”
不只是在客户端“隐藏”该字段,它甚至不向客户端发送数据。所以不可能从客户那里拿回。因此,不要设置Visible=“false”
,而是使用一个CssClass
,它将在客户端的视图中隐藏它,但数据仍然存在。然后,数据将在回发时再次在服务器端可用。正如COLD-Teld所建议的,但是没有输入错误:),记住设置标题的可见性。这是否回答了您的问题+1在发布我自己的答案之前,我没有阅读你的答案。:)我将删除我的。@hmqcnoesy很好,我同意你的观点,即当我们设置visible='true'时,整行不会发送到客户端。通常标题也应该隐藏,因此我们需要将HeaderStyle CssClass=“hidden”添加到BoundField标记中。添加这一点也只隐藏标题\