繁体   English   中英

如何在winform上刷新数据驱动的组合框

[英]How to refresh data driven combo box on a winform

我有一个winform,其中包含一个从数据库中的查询中填充的组合框。 如果我向数据库添加一个字段,新字段将不会显示在表单中,直到我关闭它并重新打开它。

我能够放入一个MessageBox.Show(),一旦弹出,我关闭它,并在组合框中看到新数据。

编辑:

让我澄清一下。 我有一个下拉组合框,它由表适配器填充。 我只是用GUI进行数据绑定,所以我不确定它是如何工作的。

我想要的是,当我回到它时,我希望我输入的新数据能够刷新。 我有一个单独的窗口来管理数据,然后我关闭它我希望组合框更新我刚刚保存的内容。

这可能吗? 我尝试在表单加载上执行此操作,但这也不起作用,我认为因为表单已经加载。

Refresh方法不适用于此。 您想要实现的是刷新数据绑定。 这将是这样的:

cb.DataBindings[0].ReadValue();

另一种方法是使用支持更改通知的数据源。 此类数据源使用适当的参数触发ListChanged事件,以触发绑定到它的控件的更新。

你必须再次从数据集中填充表适配器

youTableAdapter.Fill(yourdataSet.tablename);

然后你必须重新分配数据源

this.combobox.DataSource = this.yourBindingSource;

最后你可以刷新你的组合框

combobox.Refresh();

这取决于您的数据网格绑定的内容。 假设正确触发了数据源的ListChanged事件,重新填充数据源(如DataTable或自定义BindingList)应自动重新填充网格。

如果我理解正确的话,你可以做的一件事就是使用像所提到的那样的ListChanged事件,但似乎这样做不起作用。

TableAdapter实际上不是标准意义上的表,而是临时存储区。

查看Form1_Load函数(或任何您命名的表单,只使用默认值)并查找tableadapter.fill方法。 this.comboboxTableAdapter.Fill(yourdataset名称)。 这实际上填充了您的数据集。

创建一个填充这些数据集的函数(如果您有多个),然后在ListChanged事件上调用该函数,甚至在表单的Activate事件上调用该函数。 这样,当您进入该子表单并更改数据时,当您返回主表单时,数据将存在。

我希望这对你的项目有所帮助,祝你好运。

这对我有用。 当我刷新辅助数据集(第一行)时,组合框最初没有获取新值,因此我将dataTable重新分配为DataSource(第三行)。

boundDataSet = proxy.ReadResources();
DataGridViewComboBoxColumn nameColumn = dataGrid.Columns["Name"] as DataGridViewComboBoxColumn;
nameColumn.DataSource = boundDataSet.Table;
         cmbguest.DataSource = null;
         loadguestDetails();

使数据集为null并重新绑定组合框,然后你可以刷新winforms中的数据驱动组合框

儿童形式内心;

private void UpdateAccount_FormClosed(object sender, FormClosedEventArgs e)
{    
   ParentForm parentForm= (ParentForm )Application.OpenForms["ParentFormName"];
   parentForm.GetAccounts();
}

父母形式内心;

 public void GetAccounts()
    {
        AccountData lastSelectedItem = (AccountData)cbAccounts.SelectedItem;
        cbAccounts.Items.Clear();
        List<AccountData> accountDatas = AccountXML.ReadAccountXML();
        if (accountDatas != null)
            foreach (var item in accountDatas)
            {
                cbAccounts.Items.Add(item);
            }

        if(lastSelectedItem != null)
        {
            cbAccounts.SelectedText = lastSelectedItem.AccountName;
        }

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM