我有一个GridView BoundField定义如下:
<asp:BoundField DataField="Id" />
在代码隐藏中,我可以获取行的实例并读取如下文本:
Row.Cells(0).Text
然而,当我像这样使BoundField不可见时......
<asp:BoundField DataField="Id" Visible="false" />
... Row.Cells(0).Text
返回一个空字符串。
我找到的唯一解决方案是创建项目并编辑项目模板,在两者中放置隐藏字段,然后使用.FindControl()
获取隐藏字段。不过,我真的不喜欢这个想法。
答案 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
添加到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
}
}