2011-02-11 102 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(); 

格塔