2009-06-02 6 views
0

J'ai un GridView ASP.NET 3.5 sur un WebForm. GridView obtient des données à partir d'un objet ObjectDataSource défini via la propriété DataSourceID dans le code en amont. ObjectDataSource renvoie une liste d'objets de classe de données personnalisés (juste une classe avec des propriétés publiques) pour remplir le GridView. Ce que je veux faire est d'utiliser la liste comsumed par GridView dans une autre méthode code-behind. À un niveau élevé: 1. GridView est chargé avec les données de liste à partir de ObjectDataSource. 2. Dans la méthode GridView.OnDataBound, j'appelle GridView.DataSource pour obtenir l'objet List. 3. J'énumère la liste et j'utilise les mêmes données pour effectuer une autre opération.Lecture de données à partir de BaseDataBoundControl.DataSource (GridView ASP.NET)

La théorie étant un appel de méthode moins dupliqué et un appel de moins à la base de données principale.

J'ai essayé d'appeler DataSource à partir de la méthode DataBound de GridView et d'appeler GridView.Rows [x] .DataItem. Dans chaque cas, je reçois uniquement une exception de référence Null ("Référence d'objet non définie sur une instance d'un objet").

Y at-il un moyen de réaliser ce que je suis après?

Répondre

0

Si je vous comprends bien, vous voulez le OnRowDataBound event. De cette façon, vous pouvez utiliser les données de la ligne qui était juste databound:

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

Mais voulez-vous l'événement onRowDataBound? Il semble que vous voulez l'événement onDataBound pour la source de données entière de GridView ...

Donc vous ne voulez pas nécessairement une instance (ligne) de CustomDataClass, vous voulez que l'ensemble du tableau de lignes CustomDataClass [] soit utilisé ailleurs.

AIDE! J'ai besoin de ça aussi.

****** ****** MISE À JOUR

Je trouve la réponse. Pour ce faire, comme ci-dessous et définir l'événement OnSelected dans votre ObjectDataSource:

ObjectDataSource_Selected protected void (object sender, ObjectDataSourceStatusEventArgs e) { ObjectListRow [] = objectArray (ObjectListRow []) e.ReturnValue; Liste objectList = objectArray.ToList(); }

Il s'avère que ma source de données était un tableau, mais si la vôtre est une liste <> alors il suffit de lancer le e.ReturnValue comme la liste.

FROMAGE FACILE.