4

我有一个像这样定义的 GridView BoundField:

<asp:BoundField DataField="Id" />

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

Row.Cells(0).Text

但是,当我像这样使 BoundField 不可见时......

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

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

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

4

3 回答 3

7

使用DataKeyNamesgridview的属性。

<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]
于 2013-09-12T11:47:48.440 回答
0

无需添加BoundField到 aspx 页面并使其不可见。您可以为此使用 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
    }
}
于 2013-09-12T11:57:07.380 回答
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>

如果您觉得有问题,请随时询问

干杯!!!

于 2013-09-12T11:46:32.057 回答