2012-07-15 35 views
0

场景:刷新winform上显示的绑定数据需要什么?

  • 其经由按钮可见的儿童形式。
  • 委托创建时这个孩子是封闭运行某些代码。
  • 子窗体用于编辑基础数据
  • 当子窗体关闭时,最新版本的数据应显示在父窗体上的任何绑定控件上。

问题 -

下面是相关代码尝试:

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运行所有的代码,以确保这些信息显示在父表单上是最新的?

UPDATE

我已经按照阿米拉姆的意见,并在我的BindingSource穿过,从而不具有到位已经重复码父窗体。我在一些锅炉板代码中复制了方法saveToolStripButton_Click; ......真的不知道在这个小例程中发生了什么 - 这两行代码足以将信息保存回数据库吗?

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

} 

回答

0

如果使用不同的数据源,这两种形式他们,你别无选择,只能重新加载数据(有一种方法可以自动与SQL Server),但你能避免,如果你会使用相同的数据集或甚至相同的BindingSource,因此刷新将自动发生。打开时,它两种形式都包括在不同的文件编码,但他们都在同一个命名空间......我需要对现有的BindingSource作为参数传递,对孩子的形式, -

+0

我会尝试这个建议? – whytheq 2012-07-15 16:50:51

+0

是的。它不会不管他们在哪里,只要有通过绑定源 – 2012-07-15 19:07:41

+0

哇方式定义 - 对于孩子的代码是如此简单得多。我将添加一个更新原来的职位 - 请你能花60secs只是浏览一下,并让我知道任何明显的问题? – whytheq 2012-07-15 20:20:34

相关问题