Nous avons simplement créé dynamiquement un contrôle DataGridView et l'avons lié à un DataTable. Nous étions en train d'attacher du style à certaines colonnes. Mais, quand nous avons essayé d'accéder aux colonnes, nous avons eu une référence nulle. Une enquête plus approfondie, nous avons constaté que si nous ajoutons le contrôle DataGridView au formulaire principal, puis essayez d'accéder à ses colonnes, ça fonctionne bien !!!les colonnes datagridview créées dynamiquement ne sont pas accessibles à moins d'être ajoutées à un formulaire ... pourquoi?
Code qui jette l'erreur:
DataGridView gv = new DataGridView();
gv.DataSource = GetDataTable(); //binding it to datatable
Debug.Assert(gv.Columns == null);
code
qui fonctionne très bien:
DataGridView gv = new DataGridView();
gv.DataSource = GetDataTable(); //binding it to datatable
this.Controls.Add(gv); //adding to form
Debug.Assert(gv.Columns == null); //the assertion fails!
Pourquoi ce comportement ainsi? Y at-il une solution de contournement pour cela?
Pourquoi avez-vous besoin d'une solution de contournement? Que faites-vous avec le DGV si vous ne l'ajoutez pas à un formulaire? –
La création du contrôle gridview se passe dans un thread. nous espérions "terminer" tout le travail ici ... avant de revenir au fil principal. De plus, dans le thread principal, nous n'avons pas de référence au contrôle créé dynamiquement. Nous devions entrer pour une réécriture majeure ... c'est pourquoi j'ai demandé s'il y avait une solution de rechange – deostroll
Beats moi pourquoi on voudrait créer un dgv dans un fil séparé. Après tout, c'est obtenir les données et remplir la grille ce qui prend du temps, pas la création de la grille. –