我有一个winform,其中包含一个从数据库中的查询中填充的组合框。如果我向数据库添加一个字段,新字段将不会显示在表单中,直到我关闭它并重新打开它。
我能够放入一个MessageBox.Show(),一旦弹出,我关闭它,并在组合框中看到新数据。
编辑:
让我澄清一下。我有一个下拉组合框,它由表适配器填充。我只是用GUI进行数据绑定,所以我不确定它是如何工作的。
我想要的是,当我回到它时,我希望我输入的新数据能够刷新。我有一个单独的窗口来管理数据,然后我关闭它我希望组合框更新我刚刚保存的内容。
这可能吗?我尝试在表单加载上执行此操作,但这也不起作用,我认为因为表单已经加载。
答案 0 :(得分:7)
Refresh方法不适用于此。您想要实现的是刷新数据绑定。这将是这样的:
cb.DataBindings[0].ReadValue();
另一种方法是使用支持更改通知的数据源。此类数据源使用适当的参数触发ListChanged事件,以触发绑定到它的控件的更新。
答案 1 :(得分:3)
您必须再次通过
从数据集填充表适配器youTableAdapter.Fill(yourdataSet.tablename);
然后你必须重新分配数据源
this.combobox.DataSource = this.yourBindingSource;
最后你可以刷新你的组合框
combobox.Refresh();
答案 2 :(得分:1)
这取决于您的数据网格绑定的内容。假设数据源的ListChanged事件被正确触发,重新填充数据源(如DataTable或自定义BindingList)应自动重新填充网格。
答案 3 :(得分:1)
如果我理解正确的话,你可以做的一件事就是使用ListChanged事件,就像上面提到的一样,但好像这样做不起作用。
TableAdapter实际上不是标准意义上的表,而是临时存储区。
查看Form1_Load函数(或任何您命名的表单,只使用默认值)并查找tableadapter.fill方法。 this.comboboxTableAdapter.Fill(yourdataset名称)。这实际上填充了您的数据集。
创建一个填充这些数据集的函数(如果您有多个),然后在ListChanged事件上调用该函数,甚至在表单的Activate事件上调用该函数。这样,当您进入该子表单并更改数据时,当您返回主表单时,数据将存在。
我希望这对你的项目有所帮助,祝你好运。
答案 4 :(得分:1)
这对我有用。当我刷新辅助数据集(第一行)时,组合框最初没有获取新值,因此我将dataTable重新分配为DataSource(第三行)。
boundDataSet = proxy.ReadResources();
DataGridViewComboBoxColumn nameColumn = dataGrid.Columns["Name"] as DataGridViewComboBoxColumn;
nameColumn.DataSource = boundDataSet.Table;
答案 5 :(得分:0)
cmbguest.DataSource = null;
loadguestDetails();
使数据集为null并重新绑定组合框然后你可以在winforms中刷新数据驱动的组合框
答案 6 :(得分:0)
子窗体内部;
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;
}
}