如何获取设置为Visible = false的字段的值?如下:
<asp:BoundField DataField="ItemID" HeaderText="Line Item ID" Visible="false"/>
但是当我尝试使用
时 int temID = Convert.ToInt32(row.Cells[0].Text);
它无法找到并引发异常,但如果我将其设为Visible =“true”则可以。
如果visible = false,我该如何检索值?
答案 0 :(得分:10)
在GridView的定义中,添加
<asp:GridView .... DataKeyNames="ItemID" ...>
您还需要使用OnRowDataBound,而不是OnDataBound
<asp:GridView .... DataKeyNames="ItemID" ... OnRowDataBound="GridView_RowDataBound">
然后在你的代码背后,像这样
protected void GridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
int ItemId = Int32.Parse(YourGridView.DataKeys[e.Row.RowIndex].Values[0].ToString());
}
}
我没有在发布前测试此代码。但这是你需要做的一般想法。它可能会也可能不会按原样运作。
答案 1 :(得分:8)
没有所有这些代码的另一种方式是这样的:
<style type="text/css">
.Hide
{
display: none;
}
</style>
在页面或css文件中。 并将此类设置为boundField:
<asp:BoundField DataField="Id" ItemStyle-CssClass="Hide" HeaderStyle-CssClass="Hide" />
希望得到这个帮助。
答案 2 :(得分:0)
我对此进行了一些争论,但最终(而不是添加RowDataBound事件),只需在我需要时从DataKeys中获取值,例如(在VB中):
x = MyGrid.DataKeys(oRow.RowIndex).Values(0).ToString)
显然这适用于值是数据键的时候......当不是时,它可能不是一个好主意。
答案 3 :(得分:-1)
如果你有IsVisible=false
,那么控件根本不会呈现给客户端,因此你无法在回发时获得值。您可以使用样式display:none
不在客户端上显示它,但仍在呈现。
<asp:BoundField DataField="ItemID" HeaderText="Line Item ID" style="display:none;"/>
在这种情况下,您将能够获得价值。
另一种方法是使用<input type="hidden" runat="server">
控件。
答案 4 :(得分:-2)
尝试添加属性
runat="Server"