web-dev-qa-db-fra.com

Comment changer la valeur de la colonne DataTable sans bouclage?

J'ai un DataTable qui a 4 colonnes. Je veux changer la valeur de la 3ème colonne en "0". Ci-dessous, mon DataTable.

ID             Name            Value      Type
----            ----            -----      -----
1              Sam              250        2
2              Rai              324        3
3              Tim              985        8

Mon résultat souhaité devrait être comme ci-dessous:

 ID             Name            Value     Type
----            ----            -----     ------
1              Sam              0          2
2              Rai              0          3
3              Tim              0          8

Comment y parvenir sans boucler? Toutes les suggestions s'il vous plaît.

9
thevan

Que dis-tu de ça? Sans boucle ....

static void Main(string[] args)
{
    DataTable table = new DataTable();

    table.Columns.Add("col1");
    table.Columns.Add("col2");

    table.Rows.Add(new object[] { "1", "1" });
    table.Rows.Add(new object[] { "1", "1" });
    table.Rows.Add(new object[] { "1", "1" });
    table.Rows.Add(new object[] { "1", "1" });

    foreach (DataRow row in table.Rows)
        Console.WriteLine(row["col2"].ToString());

    Console.WriteLine("***************************************");

    DataColumn dc = new DataColumn("col2");
    dc.DataType = typeof(int);
    dc.DefaultValue = 0;

    table.Columns.Remove("col2");
    table.Columns.Add(dc);

    foreach (DataRow row in table.Rows)
        Console.WriteLine(row["col2"].ToString());


    Console.ReadKey();
}
13
shenhengbin
DataRow[] rows = myDataTable.Select("id = 'myIdValue'); 
//If you don't want to select a specific id ignore the parameter for select.

for(int i = 0; i < rows.Length; i ++)
{
      rows[i]["value"] = 0;
}

Méthode DataTable.Select

2
CharithJ

si vous connaissez l'ID, vous pouvez simplement le filtrer à l'aide de Sélectionner ou Rechercher (vous ne vous souvenez pas exactement, mais je pense qu'il s'agit de Sélectionner). Une fois que vous avez la ligne, vous pouvez affecter des valeurs de colonne.

Je suis sûr qu'il existe également une meilleure méthode orientée LINQ, mais cette approche de la vieille école ADO.NET/System.Data devrait quand même fonctionner.

1
Davide Piras

Vous pouvez utiliser un truc simple ici. Supprimer la ligne et l'ajouter à la table.

 dt.Columns.Remove("Value");
 dt.Columns.Add("Value", type(System.Int32), 0);
1
Nishantha