单击按钮时从另一个表单刷新 DataGridView [英] Refreshing DataGridView from another form on button click

查看:32
本文介绍了单击按钮时从另一个表单刷新 DataGridView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want to refresh the DataGridView after inserting a new member into the database. I created a method on the main form which occurs on the mainform_load. From the other form (addmember), after I click on SaveMemberButton I'm calling that method to refresh the datagridview but It wont happen.

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

This is my code on the main form:

        private void MainForm_Load(object sender, EventArgs e)
        {
            //ShowLoginForm();

            ListMembers();
        }

        public void ListMembers()
        {
            MembersDataGridView.Columns.Clear();
            MembersDataGridView.DataSource = Connection.ListMembers();
            MembersDataGridView.ClearSelection();
        }

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

This is my code on the other form:

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

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

This is the code which gets the data from the database:

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;
}

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

On the MainForm_Load the gridview lists the data perfectly. But I can't refresh the gridview, I have to restart the application to refresh it. Any suggestions ?

推荐答案

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

MainForm always stay opened during processes ?

如果是这样,您在

private MainForm mainForm = new MainForm();

因此,您刷新了MainForm"的第二个实例,并且在MainForm"的第一个实例中看不到它.您必须将MainForm"实例发送到另一个表单.不要创建新实例.要在创建另一个表单的地方执行此操作,请将MainForm"实例发送到另一个表单:

So you refreshing the second instance of 'MainForm' and you can not see it in the first instance of 'MainForm'. You must send your 'MainForm' instance to the other form. Don't create a new instance.To do this where you create the other form send 'MainForm' instance to the other form :

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

像这样制作你的 Form2 构造函数:

Make your Form2 constructor like this:

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

并调用您的方法.

抱歉英语不好..

这篇关于单击按钮时从另一个表单刷新 DataGridView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆