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

Etr*_*rit 0 c# sql-server-2008-r2 winforms

我想在将新成员插入数据库后刷新DataGridView.我在主窗体上创建了一个方法,该方法发生在mainform_load上.从另一种形式(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();
        }
Run Code Online (Sandbox Code Playgroud)

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

        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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

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

public List<Member> ListMembers()
{
    List<Member> list = new List<Member>();

    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;
}
Run Code Online (Sandbox Code Playgroud)

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

Ser*_*tan 6

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

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

private MainForm mainForm = new MainForm();
Run Code Online (Sandbox Code Playgroud)

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

private void ShowForm2()
{
    Form2 form = new Form2(this);
    form.Show();
}
Run Code Online (Sandbox Code Playgroud)

像这样使你的Form2构造函数:

private MainForm mainForm;
public Form2(MainForm form)
{
   InitializeComponent();
   mainForm = form; 
}
Run Code Online (Sandbox Code Playgroud)

并打电话给你的方法.

抱歉英文不好..