C# 单击按钮从另一个窗体刷新DataGridView

C# 单击按钮从另一个窗体刷新DataGridView,c#,winforms,sql-server-2008-r2,C#,Winforms,Sql Server 2008 R2,我想在将新成员插入数据库后刷新DataGridView。我在主窗体上创建了一个方法,该方法发生在mainform\u加载上。在另一个表单(addmember)中,单击SaveMemberButton后,我调用该方法来刷新datagridview,但它不会发生 这是我在主窗体上的代码: private void MainForm_Load(object sender, EventArgs e) { //ShowLoginForm();

我想在将新成员插入数据库后刷新DataGridView。我在主窗体上创建了一个方法,该方法发生在mainform\u加载上。在另一个表单(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();
        }
这是我在另一张表格上的代码:

        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<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;
}
公共列表列表成员()
{
列表=新列表();
string SelectMembers=“从成员中选择*”;
sqlConnection.Open();
使用(sqlCommand=newsqlcommand(SelectMembers,sqlConnection))
{
var sqlReader=sqlCommand.ExecuteReader();
while(sqlReader.Read())
{
var成员=新成员
{
Id=Convert.ToInt32(sqlReader[“Id”]),
Name=sqlReader[“Name”].ToString(),
姓氏=sqlReader[“姓氏”]。ToString(),
EntryDate=Convert.ToDateTime(sqlReader[“EntryDate”])
};
名单.增加(成员);
}
}
sqlConnection.Close();
退货清单;
}

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

在插入新成员的代码之后。。加上这个

MembersDataGridView.DataSource = Connection.ListMembers();

在插入新成员的代码之后。。加上这个

MembersDataGridView.DataSource = Connection.ListMembers();

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; 
}
并调用您的方法


抱歉,英语不好。

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; 
}
并调用您的方法


抱歉,英语不好。

-\我在方法中有此代码。这行不通。我也试着只写这行代码,但仍然不起作用。这行不通。我也试着只写这行代码,但还是不行。先生,你救了我。谢谢:)干杯!这是非常有帮助的,我遇到了同样的问题,这是有效的!将
表单的实例传递到另一个表单并访问公众。先生,您救了我。谢谢:)干杯!这是非常有帮助的,我遇到了同样的问题,这是有效的!将
表单的实例传递到另一个表单,并访问Public。