1

私の親フォームでは、次のようDataTableに as DataSourcewhich を使用してアイテムが入力されたコンボボックスがあります。

        sourceTypes = myDataBase.SourceType.ToList<SourceTypes>();

        DataTable dt = new DataTable();
        DataColumn dc1 = new DataColumn("Name");
        DataColumn dc2 = new DataColumn("ID");

        dt.Columns.Add(dc1);
        dt.Columns.Add(dc2);

        foreach (SourceType sourceType in sourceTypes)
        {
            string sourceTypeName = sourceType.sourceTypeName;
            string ID = sourceType.sourceTypeID.ToString();
            dt.Rows.Add(sourceTypeName, ID);
        }

        comboBox3.DataSource = dt;
        comboBox3.ValueMember = "ID";
        comboBox3.DisplayMember = "Name";

親フォームから、新しいレコードを追加する子フォームを呼び出していmyDataBaseます。子フォームが閉じられるとすぐに、この新しく追加されたレコードが親のフォームのコンボボックスに表示されるようにします。だから私は、コンボボックスをリフレッシュする私のchildFrmからこのようなものを呼び出すことを考えていました.

        private void FrmChild_FormClosed(object sender, FormClosedEventArgs e)
        {
             FrmParent.refresh();
        }

親フォームに静的更新メソッドが必要になりましたが、実際には機能しません。どうすればそれを成し遂げることができますか?乾杯

編集:子フォームはここで開かれます:

    private void button7_Click(object sender, EventArgs e)
    {
        FrmChild frmChild = new FrmChild();
        frmChild.ShowDialog();
        frmChild.Dispose();
    }

EDIT2:私はこのように(静的メソッドなしで)試しましたが、うまくいきませんでした

私の子フォームで:

        private void FrmChild_FormClosed(object sender, FormClosedEventArgs e)
        {
             FrmParent frmParent = new FrmParent();
             frmParent.refresh();
        }

私の親フォームでは、メソッドを更新します (新しいレコードが myDataBase に追加された後)。

        sourceTypes = myDataBase.SourceType.ToList<SourceTypes>();

        DataTable dt = new DataTable();
        DataColumn dc1 = new DataColumn("Name");
        DataColumn dc2 = new DataColumn("ID");

        dt.Columns.Add(dc1);
        dt.Columns.Add(dc2);

        foreach (SourceType sourceType in sourceTypes)
        {
            string sourceTypeName = sourceType.sourceTypeName;
            string ID = sourceType.sourceTypeID.ToString();
            dt.Rows.Add(sourceTypeName, ID);
        }

        comboBox3.DataSource = dt;
        comboBox3.ValueMember = "ID";
        comboBox3.DisplayMember = "Name";

このように試してみましたが、コンボボックスはまだ更新されません。

4

1 に答える 1

0

親フォームを子フォームに渡し、そのメソッドを呼び出すことができます。refresh親フォームを受け取る子フォームにコンストラクターを作成し、メソッドを静的にしないでください。また、Closingイベントの代わりにイベントを処理してみてくださいClosed

FrmChild クラス:

private FrmParent parentForm = null;
public FrmChild(FrmParent pf)
{
   parentForm = pf;
}

これでclosing、refresh メソッドを呼び出すことができます

private void FrmChild_FormClosing(object sender, FormClosingEventArgs e)
{
   if(parentForm != null)
      parentForm.refresh();
}

FrmParent クラス

private void button7_Click(object sender, EventArgs e)
{
    using(FrmChild frmChild = new FrmChild(this))
    {
       frmChild.ShowDialog();     
    }
}
于 2013-04-21T23:09:02.983 に答える