/ / C # Win. Форма - дані, що не відображають, коли два огляди даних встановлені рівними - c #, форми win, datagridview, c # -3.0, кількість населення

C # Win. Форма - дані, що не відображаються, коли 2 типи даних даютьрівні встановлюються рівними - c #, winforms, datagridview, c # -3.0, населення

У мене є 2 форми (Form1, Form2), кожна з яких має 1 datagridview з модифікатором Публічний і 1 кнопка. Код, написаний на кнопках:

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

Проблема

Тепер, коли я натискаю кнопка Form1, З'являється Form2, але значення в datagridview1 форми1 не відображаються в datagridview1 Form2 але коли я програмно перевіряю на значення в datagridview1 Form2, значення є.

Рішення спробували

  1. datagridview1.Refresh (); - Я намагався оновити контроль над Form2, але жодних змін не було помічено.
  2. f.Refresh (); - Я навіть намагався оновити весь Form2, але все ще не було помічено змін

Примітка: - Я знаю, що я замість того, щоб писати f.datagridview1 = datagridview1; я можу написати цикл для заповнення datagridview, але мені потрібно знати, в чому проблема з вищевказаним кодом.

Спасибі заздалегідь

Відповіді:

1 для відповіді № 1

Не слід перевизначати посилання наdataGridView (це означає, що ви отримаєте доступ до dataGridView з Form1, навіть якщо ви маєте доступ до f.dataGridView1 з Form2), а скоріше встановіть DataSource з обох dataGridViews на один і той же об’єкт.

Таким чином, помилка у вашому коді може бути помітна, якщо додати наступний рядок у свій код:

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

Ви побачите, що раптом ваш перегляд даних у Form1 буде порожнім, оскільки datagridview1 І f.datagridview1 буде вказувати на той самий перегляд даних у Form1. Також ви більше не можете отримувати доступ до перегляду даних від From2 (принаймні, не так просто).

Тож, можливо, спробуйте замість цього:

f.datagridview1.DataSource = datagridview1.DataSource

Цей код просто встановить обидва DataSources (які містять фактичні дані) для одного і того ж об'єкта в обох datagridviews.

Сподіваюся, це пояснення є дещо зрозумілим :)


0 для відповіді № 2

Ви можете використовувати ResetBindings на об’єкті BindingSource. Так як це:

//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);

Повідомте мене, якщо це вам підходить