9
votes

Mettez à jour un jeu de données dans C # sans utiliser de boucle?

Supprimez qu'il y a trois colonnes dans mon jeu de données

  1. code

  2. nom

  3. couleur

    Si je connais le code et le nom, comment puis-je mettre à jour la couleur de cette ligne spécifique dont le code et le nom correspondent à mes critères? Je veux faire cela sans utiliser des boucles!


3 commentaires

Pourquoi au monde voulez-vous faire cela sans utiliser des boucles? quelque part , une boucle sera nécessaire. Même si vous utilisez LINQ, une boucle est toujours effectuée en interne.


Cody, l'OP veut mettre à jour 1 rangée. Un dictionnaire n'aurait pas besoin d'une boucle.


Une table n'est pas un dictionnaire


5 Réponses :


-4
votes

vous pouvez faire:

 foreach (DataRow row in datatable.Rows)
        {
            if(row["code"].ToString() == someCode && row["name"].ToString() == someName)

              {
                  row["color"] = someColor;
              }


        }


1 commentaires

-1 -> L'affiche indiquait dans sa question pour ne pas utiliser de boucles. Je comprends que cela fonctionne, mais cela brise déjà les critères de la question de la get aller.



11
votes
// Use the Select method to find all rows matching the name and code.
DataRow[] rows = myDataTable.Select("name 'nameValue' AND code = 'codeValue');

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

3 commentaires

Comment cette ligne mise à jour sera reflétée en arrière (engagé) à DataTable


@Zain: Cela fait déjà la mise à jour. Utilisez la méthode de sélection du jeu de données pour localiser une ligne spécifique et attribuer de nouvelles valeurs aux colonnes souhaitées. C'est ça.


devrait être datarsw [] rangées = mydataTable.select ("nom =" namevalue "et code = 'codevalue')



14
votes

Vous pouvez utiliser LINQ:

DataRow dr = datatable.AsEnumerable().Where(r => ((string)r["code"]).Equals(someCode) && ((string)r["name"]).Equals(someName)).First();
dr["color"] = someColor;


2 commentaires

Maintenant, j'obtiens d'erreur à Data.EnmeraBraLerowCollection ne contient pas .First () Nous ne faisons également que mettre à jour une ligne Comment reflétera ces changements dans DataTable.


Assurez-vous que vous êtes à l'aide de system.linq , mais où () ne doit pas fonctionner non plus si cela n'était pas référencé. En "reflètent les changements" voulez-vous les voir sur l'écran? Vous devrez réactiver le jeu de données sur tout ce que vous utilisez pour l'afficher.



5
votes
DataTable recTable = new DataTable();

// do stuff to populate table

recTable.Select(string.Format("[code] = '{0}' and [name] = '{1}'", someCode, someName)).ToList<DataRow>().ForEach(r => r["Color"] = colorValue);

1 commentaires

C'est toujours une boucle



0
votes

avec LINQ:

var dataRows = dt.AsEnumerable().Select(c => { c["color"] = c["Code"].ToString() == "1" ? "Red" : "White"; return c; });
dt = dataRows.CopyToDataTable();


0 commentaires