2011-02-11 96 views
3

我在asp.net中绑定了一个使用DataSource的GridView,我想要一些隐藏的BoundFields,这样我就可以在RowDataBound函数中访问这些值。但是,当我在这些BoundField上设置Visible =“False”时,值不会被设置,并且在RowDataBound函数中始终为空。如何在ASP.NET的GridView中使用隐藏的Boundfield?

有没有办法做到这一点?我已经看到了一些关于将BoundField上的样式设置为隐藏的建议,但这对我也不起作用。理想情况下,我甚至不需要在gridview中创建的列,我只是希望隐藏这些值,以便我可以访问它们。谢谢!

+1

直接使用`e.Row.DataItem`。第二种选择是使用不可见的TemplateField。 – 2011-02-11 22:07:19

+1

我假设你已经尝试了这一切,除了`Visible =“True”`,对吧?我不确定为什么BoundField不能被访问。 – 2011-02-11 22:12:48

+0

对不起,我花了这么长时间回应家伙,无法检查周末。 – Drew 2011-02-14 13:23:20

回答

1

您是否尝试过使用从GridViewRowEventArgsDataItem传递给你的RowDataBound方法?

像:

protected void MyGridView_OnRowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     DataRowView rowView = (DataRowView)e.Row.DataItem; 
     // do something with rowView["myHiddenField"] 
    } 
} 

Check MSDN here.

2

奇怪,你最近怎么样?我知道我在使用前已经这样做了:

<asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Eval("ColumnName")%>'/> 
2

为此,我会建议你使用DataKey。

请参照该链接http://www.codeproject.com/KB/grid/Data_presentation.aspx

例如:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" 

的DataKeyNames = “EMP_ID,代码”>

int EmployeeID = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Values[0]); 
    int DepartementID = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Values[1]); 
中的DataRow

结合:

((GridView)sender).DataKeys[e.Row.RowIndex].Value.ToString(); 

格塔