从Gridview的可见false BoundField中检索数据

时间:2012-07-14 18:39:12

标签: c# gridview boundfield rowcommand

我在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

,则会返回正确的值

8 个答案:

答案 0 :(得分:25)

使用客户端html隐藏

尝试这样的事情
<style type="text/css">
     .hidden
     {
         display:none;
     }
</style>

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

</asp:BoundField>

答案 1 :(得分:4)

虽然这是一年前的问题(事实上已经有一年了),但这是另一种不使用CssClass的解决方法。

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

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

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我遇到了同样的问题。

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

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

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

答案 5 :(得分:0)

似乎如果GridView列被标记为不可见,则它不会在运行时填充,因此它不返回任何内容。所以,我只是从绑定到Gridview的DataView填充了Hyperlink,记得将DataView声明为共享。

我在VB asp.net中为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

答案 6 :(得分:0)

这对我有用:

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

答案 7 :(得分:0)

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

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

即使您的boundfield可见性设置为false。