2009-09-08 12 views

Répondre

4

Vous itérer les lignes, pas la colonne

DataColumn SETTINGS = dt.Columns["DEFAULTSETTINGS"]; 
foreach(DataRow row in dt.Select()) 
{ 
    object columnValue = row[SETTINGS]; 
    // Do something with columnValue 
} 
1

Vous pouvez utiliser LINQ dans .NET 3.5:


DataColumn col = dt.Columns["DEFAULTSETTINGS"]; 
object value = //expected value 
bool valueExists = dt.AsEnumerable().Any(row => row.Field<object>(col).Equals(value)); 

EDIT: Il semble d'après les commentaires que vous essayez de voir si la colonne 'DEFAULTSETTINGS' contient la chaîne 'default'. La méthode d'extension Field place simplement l'objet dans la colonne de données de cette colonne dans le type donné, vous pouvez donc modifier le paramètre type plutôt que d'utiliser ToString(). Donc, pour votre exemple, vous pouvez probablement utiliser:


DataColumn col = dt.Columns["DEFAULTSETTINGS"]; 
bool valueExists = dt.AsEnumerable().Any(row => "default".Equals(row.Field<string>(col), StringComparison.OrdinalIgnoreCase); 
+0

LINQ est bon; encore plus court serait '.AsEnumerable(). Contient (value)'. –

+0

Je reçois «le nom 'col' n'existe pas dans le contexte actuel ' bool valueExists = dt.AsEnumerable(). Tout (row => row.Field (col) .Equals (value)); –

+0

Oui ce serait mieux, je ne sais pas pourquoi je l'ai fait de cette façon vraiment ... – Lee

3

Il n'y a pas besoin d'utiliser LINQ ou itérer manuellement vos DataRows aussi vieux ADO.NET plaine a un couple de solutions telles que DataTable.Select et DataView.RowFilter.


string value = "default"; 
bool found = dt.Select("DEFAULTSETTINGS = " + value).Length > 0; 

Il est évident qu'une fois que vous obtenez les lignes filtrées, vous pouvez faire ce que vous voulez avec elles. Dans mon exemple, j'ai juste vérifié pour voir si n'importe quelle rangée était dans les critères mais vous pouvez les manipuler comme vous l'entendez.