Gridview将BoundField的值设置为Visible = False

时间:2011-08-04 17:05:12

标签: c# asp.net

如何获取设置为Visible = false的字段的值?如下:

 <asp:BoundField DataField="ItemID" HeaderText="Line Item ID" Visible="false"/> 

但是当我尝试使用

 int temID = Convert.ToInt32(row.Cells[0].Text);

它无法找到并引发异常,但如果我将其设为Visible =“true”则可以。

如果visible = false,我该如何检索值?

5 个答案:

答案 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"