2009-07-20 7 views
0

(Utilisation de Visual Studio 2005/.NET 2.0)ADO.NET - remplissage manuellement colonne

J'ai un DataSet qui est prérempli d'un autre module en utilisant SQL. Toutes les valeurs sont bonnes et resteront les mêmes. Mais une fois que je récupère le DataSet (et l'assigner à un DataTable puisqu'il s'agit d'un ensemble de table unique), j'ai besoin d'ajouter une colonne supplémentaire à la fin du DataTable et de le remplir en fonction des valeurs de chaque ligne.

Comme un exemple simplifié, disons par exemple:

valeurs de la colonne 1 doivent être vérifiés. Si elles sont égales à "A", la nouvelle colonne doit être définie sur "G". "B", de même "H", et "C" de même "I". Ce que j'ai besoin de faire est de parcourir la table, en vérifiant la valeur de chaque ligne et de remplir la nouvelle colonne pour cette rangée en conséquence. J'ai des difficultés à trouver le moyen de le faire (plus précisément, définir la valeur de DataColumn en l'identifiant par son nom ou un autre identificateur - array serait correct) et utiliser des extraits de code ou des instructions.

Cela semble assez simple, mais je ne trouve pas les informations sur la façon de le faire partout où j'ai regardé. Merci à l'avance ...

Répondre

1

Vous pouvez le faire en créant programmatically la colonne puis, à l'aide le nom de votre nouvelle colonne, remplissez-le en fonction des conditions que vous souhaitez.

Voici un extrait qui montre ce que je veux dire:

... 
    yourDataTable.Columns.Add("MyNewColumn"); 

    foreach (DataRow row in yourDataTable.Rows) { 
     string column1Value = row["Column1"].ToString(); 
     if (column1Value == "A") { 
      row["MyNewColumn"] = "G"; 
     } else if (column1Value == "B") { 
      row["MyNewColumn"] = "H"; 
     } else if (column1Value == "C") { 
      row["MyNewColumn"] = "I"; 
     } 
    } 
    ... 

Est-ce que vous cherchez?

-Jay

+0

C'est parfait. Merci! J'ai oublié que vous pouviez vous référer aux colonnes directement par nom (par opposition à l'utilisation de la fonction Rechercher les contrôles d'une certaine façon ... supposons que vous en avez seulement besoin lorsque vous essayez d'extraire une liste, une case ou une autre valeur). – n2009

+0

Notez que, puisque nous avons la DataColumn en main (puisque nous venons de la créer), il serait plus efficace d'utiliser row [dataColumn.Ordinal] plutôt que le nom de la chaîne. –

1
DataColumn dc = dt.Columns.Add("columnName", typeof(whatever)); 
foreach (DataRow dr in dt.Rows) { 
    dr[dc] = CalculateFromOtherColumns(dr); 
} 
+0

Mais que fait CalculateFromOtherColumns? Néanmoins, il est bon de savoir que vous pouvez aller dr [dc] en utilisant un objet DataColumn que vous venez d'ajouter pour faire référence à ces données. – n2009

+0

Vous avez dit vouloir "le peupler en fonction des valeurs de chaque ligne". –

0

Si le comparisson est simple, vous pouvez utiliser une colonne d'expression dans votre datatable (vérifiez les surcharges de Columns.Add pour plus d'informations et MSDN)

Sinon, vous devriez ajoutez d'abord une colonne normale via Columns.Add avec le type de données correct (à partir de ce que vous écrivez une chaîne ou peut-être booléen, à en juger par les valeurs true/false kinda dans cette colonne)

Ensuite, faites une foreach sur chacun des les lignes:

foreach (DataRow row in table.Rows) 
    if (row["columnA"] == "A") 
    row["columnX"] = "G"; 
    else 
    row["columnX"] = "F"; 

Et oui, vous devriez faire la vérification de type et vous pouvez faire ce code beaucoup plus court (mais je tape sur un iPhone en ce moment :))

+0

Bonne information, merci! l'élément clé de l'information était que vous pouvez vous référer à une colonne spécifique en utilisant un objet ligne. J'ai marqué l'autre réponse comme "la" réponse parce qu'elle offrait plus d'informations. – n2009

Questions connexes