【发布时间】:2015-12-01 12:23:55
【问题描述】:
我有以下代码来填充 DataGridViewComboBoxColumn
try
{
itemReader = sc.ExecuteReader();
itemDT = new DataTable();
itemDT.Columns.Add("id", typeof(string));
itemDT.Columns.Add("ar_desc", typeof(string));
itemDT.Load(itemReader);
itemIDcmbColmn.ValueMember = "id";
itemIDcmbColmn.DisplayMember = "ar_desc";
itemIDcmbColmn.DataSource = itemDT;
}
catch (Exception e)
{
MessageBox.Show("Exception - populateGridComboBox(): " + e.Message);
}
finally
它可以很好地填充组合框。我有一个按钮可以将新记录插入到 DataGridViewComboBoxColumn 中,它打开另一个表单 FormB 并提示用户输入新项目的名称和 ID。但问题是在我关闭并重新打开 FormA 之前,新添加的项目不会出现在组合框中。这是我在 FormB 中的代码:
BindingSource bs = new BindingSource();
DataGridViewComboBoxColumn itemCmbClmn = prcFrm.itemIDcmbColmn; //Get FormsA DataGridViewComboBoxColumn
DataTable itemDataTable = prcFrm.ItemData; //Get FormA datatable
itemCmbClmn.ValueMember = itemID.ToString();
itemCmbClmn.DisplayMember = txtItemAr.Text;
bs.DataSource = itemDataTable;
itemCmbClmn.DataSource = bs;
prcFrm.dataGridView1.Update();
当我运行 addNew 时,我得到一个字段不存在的异常。请提供任何帮助,我是 C# 和 Visual Studio 的新手,在此先感谢您
【问题讨论】:
-
你有一个主表单,另一个,非模态表单 formA 和第三个非模态表单 formB 吗?是这样的吗?
-
FormA 是包含 DataGridViewComboBoxColumn 的数据网格的主窗体,第二个窗体 FormB 是单击 addNewItem 按钮时显示的窗体。没有第三种形式
-
好的。然后让 FormB 抛出一个事件。您不应直接从其他表单更新 mainform-elements,也不应创建交叉引用。相反,您在表单 b 上创建一个自己的事件,并在打开表单 B 时订阅它。您在表单 B 上抛出事件,(自定义事件参数也可用于传递要添加的新记录)向下传递到表单 A . formA 上的订阅事件处理程序将不得不更新网格。试试这个。好吗?
-
我创建了一个新的DataGridViewComboBox实例并将FormA的实例添加到新的实例中,它解决了异常,但是,直到我关闭并重新打开FormA,新添加的值才会出现,任何帮助请问?
-
谢谢,但是你能发一个示例代码吗?因为我是 C# 及其事件的新手.. 再次感谢您。
标签: c# visual-studio-2015 datagridviewcombobox