Supprimez qu'il y a trois colonnes dans mon jeu de données p>
code p> li>
nom p> li>
couleur p> li> ol>
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
5 Réponses :
vous pouvez faire:
foreach (DataRow row in datatable.Rows) { if(row["code"].ToString() == someCode && row["name"].ToString() == someName) { row["color"] = someColor; } }
-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.
// 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; }
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')
Vous pouvez utiliser LINQ:
DataRow dr = datatable.AsEnumerable().Where(r => ((string)r["code"]).Equals(someCode) && ((string)r["name"]).Equals(someName)).First(); dr["color"] = someColor;
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 code>, mais
où () code> 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.
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);
C'est toujours une boucle
avec LINQ:
var dataRows = dt.AsEnumerable().Select(c => { c["color"] = c["Code"].ToString() == "1" ? "Red" : "White"; return c; }); dt = dataRows.CopyToDataTable();
Pourquoi au monde voulez-vous faire cela sans utiliser des boucles? quelque part i>, 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