C# обновить DataGridView при обновлении или вставке в другую форму

у меня есть 2 формы, которые являются form A и form B,

form A позволяет пользователю вставлять и обновлять информацию о студенте.

form b - это только DataGridView и кнопка там.

когда я вставляю студент на form A, тогда я иду в form B, новый студент не отображается в DataGridView, и если я перезапущу программу, новый студент появится в form B.

я попытался использовать эту кнопку on в форме б

datagridview1.refresh();
datagridview1.update();

но он все еще не работает.


редактировать:

мой код для вставки работника

cmd = new OleDbCommand("insert into FWINFOS (ID,Name,Gender,DateOfBirth,Race,WorkingPlace,PassportNO,DateOfExpire,[Position],Photo) values('" + textBox5.Text + "','" + textBox1.Text + "','" + textBox2.Text + "','" + dateTimePicker1.Value + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox6.Text + "','" + dateTimePicker2.Value + "',@Position,@Photo)", con);


        cmd.Parameters.AddWithValue("@Position", comboBox1.SelectedText.ToString());
        conv_photo();

        con.Open();
        int n = cmd.ExecuteNonQuery();
        //cmd.ExecuteNonQuery();
        con.Close();
        if (n > 0)
        {
            MessageBox.Show("Inserted");
            loaddata();

            rno++;
        }
        else
            MessageBox.Show("No Insert");



    }

мой Datagridview1(Form2) не обновляется автоматически, когда я вставил нового работника. Но если я перезапущу приложение, появится новый работник.

6 ответов


// Form A
public void loaddata()
{
    //do what you do in load data in order to update data in datagrid
}

затем в форме B определить:

// Form B
FormA obj = (FormA)Application.OpenForms["FormA"];

private void button1_Click(object sender, EventArgs e)
{
    obj.loaddata();
    datagridview1.Update();
    datagridview1.Refresh();
}

для datagridview в C#, используйте этот код

con.Open();
MySqlDataAdapter MyDA = new MySqlDataAdapter();
string sqlSelectAll = "SELECT * from dailyprice";
MyDA.SelectCommand = new MySqlCommand(sqlSelectAll, con);

DataTable table = new DataTable();
MyDA.Fill(table);

BindingSource bSource = new BindingSource();
bSource.DataSource = table;


dataGridView1.DataSource = bSource;
con.Close();

он работает для отображения новых записей в datagridview.


DataGridView.Refresh и DataGridView.Update - это методы, унаследованные от Control. Они связаны с перерисовкой элемента управления, поэтому новые строки не появляются.

Я предполагаю, что поиск данных находится на Form_Load. Если вы хотите, чтобы ваша кнопка в форме B извлекала последние данные из базы данных, то это то, что вам нужно сделать, что делает Form_Load.

хороший способ сделать это-разделить ваши вызовы извлечения данных на отдельные функция и вызовите ее как из событий загрузки, так и из событий нажатия кнопки.


положить быстрый пример, должен быть достаточной отправной точкой

код в виде

public event EventHandler<EventArgs> RowAdded;

private void btnRowAdded_Click(object sender, EventArgs e)
{
     // insert data
     // if successful raise event
     OnRowAddedEvent();
}

private void OnRowAddedEvent()
{
     var listener = RowAdded;
     if (listener != null)
         listener(this, EventArgs.Empty);
}

код в форме B

private void button1_Click(object sender, EventArgs e)
{
     var frm = new Form2();
     frm.RowAdded += new EventHandler<EventArgs>(frm_RowAdded);
     frm.Show();
}

void frm_RowAdded(object sender, EventArgs e)
{
     // retrieve data again
}

вы даже можете рассмотреть возможность создания собственного EventArgs класс, который может содержать добавленный данных. Затем вы можете использовать это, чтобы добавить данные в новую строку в datagridview в


для обновления данных gridview в любом месте, где вам просто нужен этот код:

datagridview1.DataSource = "your DataSource";
datagridview1.Refresh();

мой datagridview-это режим editonEnter . поэтому он обновляется только после того, как я покидаю ячейку или после повторного посещения и выхода из ячейки дважды.

для запуска этого iimedately . я расфокусируй от управления datagridview . затем переориентировать его.

 this.SelectNextControl(dgv1,true,true,false,true);    
 Application.DoEvents();    //this does magic
 dgv1.Focus();