Comment itérer par programme les lignes de la grille de données ?
-
08-06-2019 - |
Question
Je reviens soudainement à WinForms, après des années de développement Web, et j'ai des problèmes avec quelque chose qui devrait être simple.j'ai un ArrayList
d'objets métier liés à un Windows Forms DataGrid
.J'aimerais que l'utilisateur puisse modifier les cellules et, une fois terminé, appuyer sur le bouton Enregistrer.À ce stade, j'aimerais parcourir toutes les lignes et colonnes du DataGrid
pour rechercher les modifications et les enregistrer dans la base de données.Mais je ne trouve pas de moyen d'accéder au DataGrid
Lignes.
Je souhaiterai également valider les cellules individuelles en temps réel, au fur et à mesure de leur modification, mais je suis presque sûr que cela peut être fait.(Peut-être pas avec un ArrayList
comme le DataSource
?) Mais quant à l'itération du DataGrid
, je suis assez surpris que cela ne semble pas possible.
Dois-je vraiment intégrer les données de mes objets métier dans des tables de données afin d'utiliser la grille de données ?
La solution
foreach(var row in DataGrid1.Rows)
{
DoStuff(row);
}
//Or ---------------------------------------------
foreach(DataGridRow row in DataGrid1.Rows)
{
DoStuff(row);
}
//Or ---------------------------------------------
for(int i = 0; i< DataGrid1.Rows.Count - 1; i++)
{
DoStuff(DataGrid1.Rows[i]);
}
Autres conseils
object cell = myDataGrid[row, col];
Y a-t-il quelque chose dans WinForms 3.0 qui est bien meilleur que dans la version 1.1
Je ne connais pas la version 3.0, mais vous pouvez écrire du code dans VS 2008 qui s'exécute sur le framework .NET 2.0.(Vous pouvez donc utiliser le dernier langage C#, mais vous ne pouvez utiliser que les bibliothèques 2.0)
Cela vous donne des génériques (List<DataRow>
au lieu de ces GodAwful ArrayLists) et une tonne d'autres choses, vous finirez littéralement par écrire 3 fois moins de code.
Aha, je testais encore une fois tout le monde !:) La vraie réponse est que vous avez rarement besoin de parcourir la grille de données.Parce que même lors d'une liaison à une ArrayList, la liaison est bidirectionnelle.Pourtant, il est pratique de savoir comment itérer directement la grille, cela peut économiser quelques lignes de code de temps en temps.
Mais NotMyself et Orion ont donné les meilleures réponses :Convaincre les parties prenantes de passer à une version supérieure de C#, pour réduire les coûts de développement et augmenter la maintenabilité et l'extensibilité.