SQLite C # и DataGridView

#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()