У мене є 2 форми (Form1, Form2), кожна з яких має 1 datagridview з модифікатором Публічний і 1 кнопка. Код, написаний на кнопках:
Form2 f = new Form2();
f.Show();
f.datagridview1 = datagridview1;
Проблема
Тепер, коли я натискаю кнопка Form1, З'являється Form2, але значення в datagridview1 форми1 не відображаються в datagridview1 Form2 але коли я програмно перевіряю на значення в datagridview1 Form2, значення є.
Рішення спробували
- datagridview1.Refresh (); - Я намагався оновити контроль над Form2, але жодних змін не було помічено.
- 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);
Повідомте мене, якщо це вам підходить