我有一个带有DataGridView
和combobox
的表格。 Combobox
通过属性菜单中的DataSource填充,我也通过该菜单指定DisplayMember和ValueMember。
我有一个按钮,当我单击它时,将显示另一个表单,并且可以向组合框的数据源添加新项。
关闭此新表单时,我希望刷新comobox的数据源,以便可以看到刚在combobox中添加的新项,但是我不知道如何。
我尝试过:
myComboBox.Refresh();
但什么都没发生
我也尝试过这个:
myComboBox.Items.Add(myclass.myNewItem);
但是会引发异常:
设置数据源属性后,不能修改items集合。
请问有人可以帮助我吗?
编辑: 我发现当我以第二种形式添加新项目时,一切都很好,新项目也已添加到数据库中,但是当我返回第一种形式时,听起来好像什么都没有发生。所以我将listBox添加到第二种形式,但回到第一种形式后我什么也没看到。我真的不知道为什么即使我的数据库发生了更改,组合框和列表框也使用旧的数据源。 然后我尝试了一下,它奏效了:
在第二种形式中,我将新项目保存在一个类中(称为转移),当我返回第一种形式时,这样做了:
DsMy.tblRow row = dsMy.tbl.NewtblRow();
row.BeginEdit();
row.Name = transfer.newName;
row.Id = transfer.newId;
row.EndEdit();
dsMy.tbl.AddtblRow(row);
this.Validate();
tblTableAdapter.Update(dsMy.tbl);
myComboBox.Refresh();
感谢大家的帮助! :)
答案 0 :(得分:2)
在包含comboBox的主窗体中。我猜你的代码就是这样
private void btnAddNewObjectsButton_Click(object sender, EventArgs e)
{
AddNewObjectsForm form2 = new AddNewObjectsForm();
form2.ShowDialog();
if (form2.isSuccess)
{
this.myComboBox.DataSource = null;
this.myComboBox.Items.Clear();
this.myComboBox.DataSource = db.Object.ToList();//If you work with Entity frame work
cmbCustomer.ValueMember = "Id";
cmbCustomer.DisplayMember = "Name";
}
}
另一种形式的代码将是
public partial class AddNewdbObjects : Form
{
//isSuccess is a flage that will be true if the new object is added to db or no
public isSuccess = false;
//After Constructor in your click event
private void btnSave_Click(object sender, EventArgs e)
{
//Intialize data base source;
_db = new DBEntities();
dbObject obj = new dbObject();
obj.Name = txtName.Text;
try
{
_db.dbObject.Add(cust);
_db.SaveChanges();
isSuccess = true;
this.Close();
}
catch (Exception exc)
{
isSuccess = false;
}
}
}
此解决方案应与您一起使用。
答案 1 :(得分:1)
尝试一下:
DataTable table = new DataTable();
DataRow row;
DataColumn column;
// Create new DataColumn, set DataType, ColumnName and add to DataTable.
column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.ColumnName = "ValueMember";
table.Columns.Add(column);
// Create second column.
column = new DataColumn();
column.DataType = Type.GetType("System.String");
column.ColumnName = "DisplayMember";
table.Columns.Add(column);
row = table.NewRow();
row["ValueMember"] = 1;
row["DisplayMember"] = "item";
table.Rows.Add(row);
comboBox1.DataSource = null;
comboBox1.DataSource = table;
comboBox1.DisplayMember = "DisplayMember";
comboBox1.ValueMember = "ValueMember";
希望对您有所帮助:)
答案 2 :(得分:0)
我要做的就是填写TableAdapter,然后刷新组合框:
tblTableAdapter.Fill(dsMy.tbl);
myComboBox.Refresh();