2008-08-08 21 views
3

Je suis soudainement de retour à 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 un bouton Enregistrer. À ce stade, je voudrais parcourir toutes les lignes et les colonnes dans le DataGrid pour trouver des modifications et les enregistrer dans la base de données. Mais je ne peux pas trouver un moyen d'accéder aux lignes DataGrid.Comment itérer par programmation les lignes de données de grille?

Je vais aussi vouloir valider des cellules individuelles en temps réel, comme elles sont éditées, mais je suis assez 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 bourrer mes données d'objets métier dans des datatables afin d'utiliser la grille de données?

Répondre

5
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]); 
} 
+3

Je pense que votre troisième exemple est faux. Pas besoin de - 1 –

0

Y at-il quelque chose au sujet WinForms 3.0 qui est tellement mieux que dans 1,1

Je ne sais pas 3.0, mais vous pouvez écrire du code dans VS 2008 qui fonctionne sur le. Cadre NET 2.0. (Donc, vous pouvez utiliser le dernier langage C#, mais vous ne pouvez utiliser que les bibliothèques 2.0)

Ceci vous donne des génériques (List<DataRow> au lieu de ces GodAwful ArrayLists) et une tonne d'autres choses, vous finirez littéralement écrire 3 fois moins de code.

1
object cell = myDataGrid[row, col]; 
-2

Aha, je ne faisais que tester tout le monde une fois de plus! :) La vraie réponse est, vous avez rarement besoin d'itérer le DataGrid. Parce que même lors de la liaison à un ArrayList, la liaison est à 2 voies. Pourtant, il est pratique de savoir comment faire une itération directe de la grille, cela permet d'é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 économiser les coûts de développement et augmenter la maintenabilité et l'extensibilité.