7

我有BoundField这个GridView

<asp:BoundField DataField="ReportId" HeaderText="RId" Visible="false" />

但是当我尝试在该字段中获取文本时,它返回空。

protected void gvwReports_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "ViewSchedule")
    {
        int index = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = gvwReports.Rows[index];
        string s = row.Cells[0].Text;
    }
}

但是,如果我将BoundField's .Visible属性更改为true

4

8 回答 8

25

尝试使用客户端 html 来隐藏这样的想法

<style type="text/css">
     .hidden
     {
         display:none;
     }
</style>

<asp:BoundField DataField="ReportId" HeaderText="RId" HeaderStyle-CssClass="hidden"   >

</asp:BoundField>
于 2012-07-14T18:52:23.987 回答
4

虽然这是一个有年头的问题(实际上正好有年头),但这是另一个不使用 CssClass 的解决方法。

在数据绑定之后,将所需列的可见性设置为 false。

gridview1.databind()
gridview1.columns(i).Visibile = False

这将在视图状态中维护数据,但不会为页面创建标记。

于 2013-07-14T06:54:21.427 回答
2

第一个解决方案工作正常,但有必要添加HeaderStyle 隐藏此列的标题

<style type="text/css">
     .hidden
     {
         display:none;
     }
</style>

<asp:BoundField DataField="ReportId" HeaderText="RId"  >
    <ItemStyle CssClass="hidden"/>
    <HeaderStyle CssClass="hidden"/>
</asp:BoundField>
于 2015-02-03T11:50:30.107 回答
0

根据我的知识,当您使绑定字段不可见时,您将无法访问它。尝试使用 TemplateField

于 2012-07-14T18:58:03.770 回答
0

我只是有同样的问题。

有趣的是,DataGrid 不会有这个问题,它允许您访问隐藏列中的数据,即使它甚至不会在客户端中呈现它们,因为它仍然会将隐藏列的信息添加到 ViewState。

另一方面,即使您将 EnableViewState 属性设置为 true, GridView 也会忽略隐藏字段。唯一的方法是将信息留在那里供客户使用样式属性隐藏,例如display: none; .

真的很不幸,我喜欢 DataGrid 的行为,但 GridView 还有其他优点。

于 2012-09-20T11:24:57.587 回答
0

似乎如果 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
于 2014-02-14T16:06:08.993 回答
0

这对我有用:

如果该列是网格上的命名 DataKeyValue,则可以将从该行发送的 e.Item 转换为 DataGridItem 并调用其 DataKeyValue。您需要将其转换为 Int、String 等,但即使该列是 visible=false,它也会存在。

于 2014-05-15T15:55:35.973 回答
0

在 rowDataBound 事件中,您可以使用以下方式访问字段的值:

(((DataRowView)e.Row.DataItem)["your_boundField_dataFieldName"]).ToString();

即使您的边界域可见性设置为 false。

于 2014-07-15T13:39:01.453 回答