是否有可能在后面的代码中获取不可见的GridViewRow的文本?

时间:2013-09-12 11:35:15

标签: asp.net gridview webforms

我有一个GridView BoundField定义如下:

<asp:BoundField DataField="Id" />

在代码隐藏中,我可以获取行的实例并读取如下文本:

Row.Cells(0).Text

然而,当我像这样使BoundField不可见时......

<asp:BoundField DataField="Id" Visible="false" />

... Row.Cells(0).Text返回一个空字符串。

我找到的唯一解决方案是创建项目并编辑项目模板,在两者中放置隐藏字段,然后使用.FindControl()获取隐藏字段。不过,我真的不喜欢这个想法。

3 个答案:

答案 0 :(得分:6)

使用gridview的DataKeyNames属性。

<asp:GridView runat="server" ID="MyGridView" DataKeyNames="Id">
</asp:GridView>

并将此ID值视为:

var data = MyGridView.DataKeys[RowIndex].Values[KeyIndex]

所以,在你的情况下,它可以如下所示第二行

var data = MyGridView.DataKeys[1].Values[0]

答案 1 :(得分:0)

所以你想要的是从被绑定的代码后面访问字段值 gridview的。

您可以简单地定义gridview的行数据绑定事件,并像这样访问它

     protected void gvMyGridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {

        int seminarId = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "PK_ID"));
    }

    //PK_ID is the database column name
}

在aspx页面中你应该有这样的东西

<asp:GridView ID="gvMyGridView" runat="server" 
   AllowPaging="false" 
OnRowDataBound="gvSeminarRequestBucket_RowDataBound">
   <asp:BoundField HeaderText="ID" DataField="PK_ID" />
 </asp:GridView>

如果您遇到问题,请随时询问

干杯!!!

答案 2 :(得分:0)

无需将BoundField添加到a​​spx页面并使其不可见。您可以使用DataBinder。如果您需要访问Id事件中的ItemDataBound值,请使用此

private void OnItemDataBound(object sender, 
        System.Web.UI.WebControls.DataGridItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || 
        e.Item.ItemType == ListItemType.AlternatingItem)
    {
        //Use DataBinder.Eval(e.Row.DataItem, "ID") to receive Id value
    }
}