#c# #sqlite #datagridview
#c# #sqlite #datagridview
Вопрос:
У меня возникает проблема, если я пытаюсь заполнить datagridview данными, если я вызываю функцию из другой формы. Все работает идеально, если я вызываю функцию в private void button1_Click в form2, где находится datagridview, но если я вызываю функцию из другой формы (Form1), datagridview пуст.
Код в Form2, где находится datagridview
public void fill_grid() {
MessageBox.Show("Yuhuuuuuuu");
form_Listusers form = new form_Listusers();
SQLiteConnection cn = new SQLiteConnection(Form1.dbQuery);
cn.Open();
string SQL;
SQL = "SELECT users_id, name, username, place FROM users";
SQLiteCommand cmd = new SQLiteCommand(SQL, cn);
SQLiteDataAdapter da = new SQLiteDataAdapter(cmd);
DataSet ds = new DataSet();
try
{
da.Fill(ds);
DataTable dt = ds.Tables[0];
this.grid_userlist.DataSource = dt;
}
catch (Exception ex)
{
MessageBox.Show("Errrrrrrror");
}
cn.Close();
}
Код в Form1 :
Form2 frm = new Form2();
frm.fill_grid();
Я получил сообщение «Yuhuuuuuu», но datagridview пуст.
#
РЕШАЕМАЯ
#
В основной форме (Form1) я установил экземпляр
Form frm_Listusers = new form_Listusers();
но после этого:
form_Listusers frm_Listusers = new form_Listusers();
я могу получить доступ к своей функции frm.fill_grid();
Ответ №1:
при запуске следующего кода:
Form2 frm = new Form2();
frm.fill_grid();
Вы просто создаете экземпляр Form2, но показанная вам форма является Form1.
Затем происходит то, что вы видите DataGridView Form1, который вы не заполняли, потому что вы сделали это в Form2.
Если вы хотите добавить отображение добавления Form2 к Form1, добавьте только следующую строку в конце:
frm.Show();
Существует несколько способов отображения Form2, в зависимости от желаемой опции (показывать только Form2, показывать оба и т.д.).
Что касается сообщения, которое вы видите, это потому, что строка: MessageBox.Показать («Yuhuuuuuu»); Это событие срабатывает для всего приложения и не зависит от того, какая форма отображается сейчас.
Комментарии:
1. Form2 является дочерним MDI по отношению к Form1. Моя функция fill_grid() объявлена в form2 (form_userlist в исходном коде). Я хочу, чтобы, если я нажму кнопку в Form1 (родительской форме), чтобы запустить функцию fill_grid в Form2 (дочерняя — эта форма скрыта в данный момент). Fill_grid() необходимо заполнить DataGridView данными из моей базы данных, а затем отобразить Form2. Если я вызываю fill_grid () из Form2 с помощью функции button_click, все работает, и я получаю результат в DataGridView
Ответ №2:
измените это `this.grid_userlist.DataSource = dt; на grid_userlist.DataSource = dt; и создайте экземпляр из вашего второго класса form в другой форме, затем вызовите методы form2, например
form2 frm2 = new fomr2;
frm2.fill_grid()