在按钮单击时从另一个表单刷新DataGridView

我想在将新成员插入数据库后刷新DataGridView。 我在主窗体上创建了一个方法,该方法发生在mainform_load上。 从另一种forms(addmember),在我点击SaveMemberButton后,我正在调用该方法来刷新datagridview,但它不会发生。

这是我在主窗体上的代码:

private void MainForm_Load(object sender, EventArgs e) { //ShowLoginForm(); ListMembers(); } public void ListMembers() { MembersDataGridView.Columns.Clear(); MembersDataGridView.DataSource = Connection.ListMembers(); MembersDataGridView.ClearSelection(); } 

这是我在另一种forms上的代码:

  private MainForm mainForm = new MainForm(); private void SaveMemberButton_Click(object sender, EventArgs e) { try { if (IsValid()) { var member = new Member { Name = AddNewNameTextBox.Text, Surname = AddNewSurnameTextBox.Text, EntryDate = DateTime.ParseExact(AddNewEntryDateTextBox.Text, "dd.MM.yyyy", CultureInfo.InvariantCulture), }; Connection.InsertMember(member); MessageBox.Show("Member registration successful!"); } mainForm.ListMembers(); this.Close(); } catch (Exception exception) { MessageBox.Show(exception.Message); } } 

这是从数据库获取数据的代码:

 public List ListMembers() { List list = new List(); string SelectMembers = "SELECT * FROM Members"; sqlConnection.Open(); using (sqlCommand = new SqlCommand(SelectMembers, sqlConnection)) { var sqlReader = sqlCommand.ExecuteReader(); while (sqlReader.Read()) { var member = new Member { Id = Convert.ToInt32(sqlReader["Id"]), Name = sqlReader["Name"].ToString(), Surname = sqlReader["Surname"].ToString(), EntryDate = Convert.ToDateTime(sqlReader["EntryDate"]) }; list.Add(member); } } sqlConnection.Close(); return list; } 

在MainForm_Load上,gridview完美地列出了数据。 但我无法刷新gridview,我必须重新启动应用程序才能刷新它。 有什么建议 ?

MainForm在进程中始终保持打开状态?

如果是这样,您可以创建一个新的’MainForm’实例

 private MainForm mainForm = new MainForm(); 

所以你刷新了’MainForm’的第二个实例,你无法在’MainForm’的第一个实例中看到它。 您必须将“MainForm”实例发送到另一个表单。 不要创建新实例。要在创建其他表单的情况下执行此操作,请将“MainForm”实例发送到另一个表单:

 private void ShowForm2() { Form2 form = new Form2(this); form.Show(); } 

使你的Form2构造函数如下:

 private MainForm mainForm; public Form2(MainForm form) { InitializeComponent(); mainForm = form; } 

并打电话给你的方法。

抱歉英文不好..

在您插入新成员的代码之后..添加此项

 MembersDataGridView.DataSource = Connection.ListMembers();