2010-10-14 22 views
1

Je suis mise à niveau un site .NET 2.0 qui utilise la version 2 de la bibliothèque d'entreprise (DAAB principalement) vers .NET version 3.5 et EntLib version 5. J'ai fait les changements nécessaires et maintenant je 'm obtient une erreur' La source de données est d'un type invalide.Il doit être un IListSource, IEnumerable ou IDataSource ". J'obtiens cette erreur essayant de placer la source de données d'un contrôle DevExpress ASPxGridView à un IDataReader.La source de données est d'un type non valide. Il doit être un IListSource, IEnumerable ou IDataSource

Voici mon code. Notre application utilise largement IDataReaders .... ces instances auront-elles toutes besoin d'être modifiées? J'ai vu un article ici qui a dit d'ajouter .ToList() à la fin de la source de données mais ce n'est pas une méthode valide dans IDataReader. S'il vous plaît noter que bien que ce fichier particulier est C#, 99% de notre application est codée dans VB.NET.

private void GetRecentAddedCasesGridData() 
    { 
     dbReader = DAL.GetRecentAddedCases(iClientKey); 
     if (dbReader != null) 
     { 
      GridRecentAddedCases.DataSource = dbReader; 
      GridRecentAddedCases.DataBind();   
     } 
     dbReader.Close(); 
     dbReader.Dispose(); 
     dbReader = null; 
    } 

Répondre

1

Essayez cette méthode d'extension

public static IEnumerable<object[]> AsEnumerable(this IDataReader reader) 
{ 
    while (reader.Read()) 
    { 
     var ret = new object[reader.FieldCount]; 
     reader.GetValues(ret); 
     yield return ret; 
    } 
} 

Ensuite, vous pouvez écrire GridRecentAddedCases.DataSource = dbReader.AsEnumerable().

+0

Pourquoi est-ce changement nécessaire ??? Est-ce une chose .NET Framework 3.5 est-il une chose DAAB 5? – Mike

0

Ceci est une "chose DAAB 5".

Selon « ctavares » à CodePlex:

« Ce fut une correction de bug dans Entlib 3.0, nous avons ajouté le support pour System.TransactionScope Il se trouve que nous avons fait mal, et a causé des pannes intermittentes dans une large mesure.. Au point que le bug a coûté un peu d'argent à certaines grandes entreprises pour résoudre le problème, et elles ont fini par retirer complètement entlib de leur système. nous possédons donc pour ne pas les fermer jusqu'à ce qu'ils ne soient plus utilisés (ce qui était le bogue) .Ainsi, nous devions emballer les lecteurs de données pour pouvoir détecter correctement quand un lecteur était fermé et gérer correctement nos connexions. Le bug a été posté ici sur le codeplex quelque part, mais j'oublie le numéro de l'article de travail. "

Source: http://entlib.codeplex.com/discussions/211288