/ / C # Win. Formulaire - Les données ne reflétant pas lorsque 2 vues de grille de données sont définies égales - c #, winforms, datagridview, c # -3.0, population

C # Win. Formulaire - Les données ne reflètent pas lorsque 2 vues de grille de données sont définies égales - c #, winforms, datagridview, c # -3.0, population

J'ai 2 formulaires (Form1, Form2) ayant chacun 1 datagridview avec modificateur Publique et 1 bouton. Le code écrit sur les boutons est: -

Form2 f = new Form2();
f.Show();
f.datagridview1 = datagridview1;

Problème

Maintenant, quand je presse le bouton de Form1, Form2 apparaît mais les valeurs dans datagridview1 de Form1 ne sont pas affichés dans le datagridview1 de Form2 mais quand je vérifie par programme les valeurs de datagridview1 de Form2, les valeurs sont là.

Solutions essayées

  1. datagridview1.Refresh (); - J'ai essayé d'actualiser le contrôle de Form2 mais aucun changement n'a été vu.
  2. f.Refresh (); - J'ai même essayé de mettre à jour tout le formulaire 2 mais aucun changement n'a été observé

Remarque: - je sais au lieu d'écrire f.datagridview1 = datagridview1; Je peux écrire une boucle pour peupler le datagridview mais j'ai besoin de savoir quel est le problème avec le code ci-dessus.

Merci d'avance

Réponses:

1 pour la réponse № 1

Vous ne devriez pas "remplacer la référence à ladataGridView (ce qui signifie que vous allez accéder à dataGridView à partir de Form1, même si vous accédez à f.dataGridView1 à partir de Form2), mais définissez plutôt le DataSource des deux dataGridViews sur le même objet.

Ainsi, l'erreur dans votre code peut être rendue visible si vous ajoutez la ligne suivante à votre code:

Form2 f = new Form2();
f.Show();
f.datagridview1 = datagridview1;
f.datagridview1.DataSource = null;

Vous verrez que, tout à coup, votre datagridview dans Form1 sera vide, car datagridview1 ET f.datagridview1 pointera vers le même datagridview dans Form1. De plus, vous ne pouvez plus accéder à datagridview à partir de From2 (du moins, pas si facile).

Alors peut-être essayer ceci à la place:

f.datagridview1.DataSource = datagridview1.DataSource

Ce code va simplement définir les deux DataSources (qui contiennent les données réelles) sur le même objet dans les deux datagridviews.

J'espère que cette explication est un peu compréhensible:)


0 pour la réponse № 2

Vous pouvez utiliser ResetBindings sur l'objet BindingSource. Comme ça:

//could be simpler assignment, but to give you a view on what is going on
BindingSource source = new BindingSource();
source.DataSource = f.datagridview1.DataSource;
source.ResetBindings(false);

Laissez-moi savoir si cela fonctionne pour vous