2009-06-02 51 views
0

我在WebForm上有一個ASP.NET 3.5 GridView。 GridView從ObjectDataSource中獲取數據,該ObjectDataSource通過前面的代碼中的DataSourceID屬性進行設置。 ObjectDataSource返回一個自定義數據類對象列表(只是一個具有公共屬性的類)來填充GridView。從BaseDataBoundControl.DataSource(ASP.NET GridView)讀取數據

我想要做的是使用由GridView在另一個代碼隱藏方法中使用的List。高級別: 1. GridView從ObjectDataSource中加載List數據。 2.在GridView.OnDataBound方法中,我調用GridView.DataSource來獲取List對象。 3.我枚舉列表並使用相同的數據做一些其他操作。

該理論是一個較少重複的方法調用,少一個調用後端數據庫。

我試着從GridView的DataBound方法調用DataSource並調用GridView.Rows [x] .DataItem。在每種情況下,我只會得到一個空引用異常(「對象引用未設置爲對象的實例」)。

有什麼辦法可以實現我的目標?

回答

0

如果我理解正確,您需要OnRowDataBound event。這樣,您就可以從只是數據綁定的行用數據:

protected void gvGrid_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    CustomDataClass data = e.Row.DataItem as CustomDataClass; 
    if (data != null) 
    { 
     // access data here... 
    } 
} 
0

但你想要的onRowDataBound事件?它看起來像你想GridView的整個數據源的onDataBound事件...所以你不需要一個CustomDataClass的實例(行),你希望整個CustomDataClass []行數組在其他地方使用。

幫助!我也需要這個。

****** UPDATE ******

我找到了答案。爲此,如下,並在您的ObjectDataSource設置OnSelected事件:

保護無效ObjectDataSource_Selected(對象發件人,ObjectDataSourceStatusEventArgs E) { ObjectListRow [] objectArray =(ObjectListRow [])e.ReturnValue; List objectList = objectArray.ToList(); }

事實證明,我的數據源是一個數組,但如果你的是一個List <>那麼只需將e.ReturnValue轉換爲List。

容易的甜點。