0

データベースに新しいメンバーを挿入した後、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();
        }

これは他のフォームの私のコードです:

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

MainForm_Load では、グリッドビューにデータが完全に一覧表示されます。しかし、グリッドビューを更新できません。アプリケーションを再起動して更新する必要があります。助言がありますか ?

4

2 に答える 2

6

プロセス中に MainForm は常に開いたままになりますか?

その場合は、'MainForm' の新しいインスタンスを作成します。

private MainForm mainForm = new MainForm();

したがって、「MainForm」の 2 番目のインスタンスを更新すると、「MainForm」の最初のインスタンスには表示されません。「MainForm」インスタンスを他のフォームに送信する必要があります。新しいインスタンスを作成しないでください。他のフォームを作成する場所でこれを行うには、「MainForm」インスタンスを他のフォームに送信します。

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

Form2 コンストラクターを次のようにします。

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

そして、メソッドを呼び出します。

下手な英語でごめんなさい..

于 2013-06-07T11:23:30.517 に答える