0

シナリオ:

  • ボタンを介して表示される子フォーム。
  • この子が閉じられたときに特定のコードを実行するデリゲートが作成されます。
  • 子フォームは、基になるデータを編集するために使用されます
  • 子フォームが閉じられると、データの最新バージョンが親フォームのバインドされたコントロールに表示されます。

質問 -

関連するコードの試みは次のとおりです。

public partial class uxRevisionHelperForm : Form
{

    public SqlCeConnection conn = new SqlCeConnection(ConfigurationManager.ConnectionStrings["WindFormAppRevisionHelper.Properties.Settings.DefinitionsDBConnectionString"].ConnectionString);
    BindingSource definitionsBindingSource = new BindingSource();

    public uxRevisionHelperForm()
    {
        InitializeComponent();
        uxDescriptionTextBox.AutoSize = true;
        refreshBindingSource();
        assignControlsToSource();
    }

      //>>>>>>>>ALL OF THE FOLLOWING METHOD IS CALLED BY THE DELEGATE WHEN THE CHILD IS CLOSED
    public void refreshBindingSource()
    {            

        SqlCeDataAdapter da = new SqlCeDataAdapter(new SqlCeCommand("Select * From tb_RevisionDefinitions",conn));
        DataSet ds = new DataSet("Helper");
        ds.Tables.Add("DefinitionsTable");
        da.Fill(ds.Tables["DefinitionsTable"]);

        // Assign the BindingSource.
        definitionsBindingSource.DataSource = ds.Tables["DefinitionsTable"];
        uxBindingNavigator.BindingSource = this.definitionsBindingSource;

    }
    void assignControlsToSource() 
    {
        uxDescriptionTextBox.DataBindings.Add(new Binding("Text", definitionsBindingSource, "Description", true));
        uxWordPhraseTextBox.DataBindings.Add(new Binding("Text", definitionsBindingSource, "WordPhrase", true));
        uxReferenceTextBox.DataBindings.Add(new Binding("Text", definitionsBindingSource, "Reference", true));
    }

    private void uxUpdateDataButton_Click(object sender, EventArgs e)   
    {
        uxRevisionHelperGroupBox.Enabled = false;
        uxBindingNavigator.Hide();
        uxFormDatabase myNewDisplay = new uxFormDatabase();
        myNewDisplay.FormClosed += delegate { activateGroupBorder(); };
        myNewDisplay.Show();    
    }

    public void activateGroupBorder() 
    {
        uxRevisionHelperGroupBox.Enabled = true;
        uxBindingNavigator.Show();
        refreshBindingSource();    //<<<<<<<<<<<DELEGATE CALLS THIS METHOD
    }

}

上記は機能しているようですがrefreshBindingSource、親フォームに表示される情報が最新であることを確認するために、メソッド内のすべてのコードを実行する必要がありますか?

アップデート

私は Amiram のアドバイスに従い、BindingSource を渡して、親フォームに既に配置されているコードを繰り返す必要がないようにしました。メソッドの定型コードをいくつかコピーしましたsaveToolStripButton_Click。...その小さなルーチンで何が起こっているのか本当にわかりません.データベースに情報を保存するには、これらの2行で十分でしょうか?

public partial class uxFormDatabase : Form
{

    BindingSource rawtableBindingSource = null;

    public uxFormDatabase(BindingSource myPassedSource) 
    {
        InitializeComponent();
        rawtableBindingSource = myPassedSource;

        uxDGVtable.AutoSize = true;
        uxDGVtable.SizeChanged += new EventHandler(uxDGVtable_change);
        dataToDGV();
    }
    public void uxDGVtable_change(object sender, EventArgs e)
    {
        if (uxDGVtable.Width < 1158)
        {
            this.Width = uxDGVtable.Width;
        }
    }

    public void dataToDGV()
    {
        uxrawdataBindingNavigator.BindingSource = this.rawtableBindingSource;
        uxDGVtable.DataSource = this.rawtableBindingSource;
    }

    private void saveToolStripButton_Click(object sender, EventArgs e)
    {
        Validate();
        rawtableBindingSource.EndEdit();
    }

}
4

1 に答える 1

0

両方のフォームに異なるデータ ソースを使用した場合、データをリロードする以外に選択肢はありません (SQL サーバーで自動化する方法があります) が、同じデータセットまたは同じ BindingSource を使用する場合は、それを回避できます。そのため、更新は自動的に行われます。

于 2012-07-15T14:49:31.320 に答える