[英]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.