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