【问题标题】:What is required to refresh bound data displayed on winform?刷新winform上显示的绑定数据需要什么?
【发布时间】:2012-07-15 14:39:38
【问题描述】:

场景:

  • 通过按钮可见的子窗体。
  • 创建一个委托以在该子项关闭时运行某些代码。
  • 子窗体用于编辑底层数据
  • 当子窗体关闭时,最新版本的数据应显示在父窗体上的任何绑定控件上。

问题-

以下是相关代码尝试:

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; ... 真的不知道在那个小例程中发生了什么 - 这两行是否足以将信息保存回数据库?

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

}

【问题讨论】:

    标签: c# winforms visual-studio-2010 sql-server-ce


    【解决方案1】:

    如果您为两种表单使用不同的数据源,您别无选择,只能重新加载数据(有一种方法可以使用 sql server 自动执行该操作),但如果您使用相同的数据集甚至是同样的BindingSource,所以会自动刷新。

    【讨论】:

    • 我会尝试这个建议 - 两种表单都编码在不同的文件中,但它们在同一个命名空间中......我是否需要将现有的 BindingSource 作为参数传递给子表单,当打开它?
    • 是的。只要有一种方法可以传递绑定源,它们在哪里定义并不重要
    • 哇 - 孩子的代码要简单得多。我将在原始帖子中添加更新 - 请您花 60 秒浏览一下并告诉我任何明显的问题吗?
    • 好的 - 更新了我认为的答案。现在唯一复制的 bolerplate 位是方法saveToolStripButton_Click 中的两行它们是否需要?足以确保将数据保存到数据库?
    • 您忘记将绑定源传递给子表单。仅当您在单击时保存到数据库时才使用带有标题“保存”的按钮,否则使用“关闭”。 endedit 对于使用控件数据更新绑定源很重要
    猜你喜欢
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    相关资源
    最近更新 更多