c# - 如何更新 ComboBox

我有一个带有DataGridView和的表格combobox。Combobox通过属性菜单中的 DataSource 填充,我也通过此菜单指定 DisplayMember 和 ValueMember。我有一个按钮,当我点击它时会显示另一个表单,我可以向组合框的数据源添加一个新项目。当我关闭这个新表单时,我希望我的 comobox 的数据源刷新,我可以看到我刚刚添加到组合框中的新项目,但我不知道如何。


我试过了:


myComboBox.Refresh();

但什么也没发生


我也试过这个:


myComboBox.Items.Add(myclass.myNewItem);

但它抛出一个异常:


设置数据源属性后,无法修改项目集合。


有谁可以帮我吗?


编辑: 我发现当我以第二种形式添加一个新项目时,一切都很好,新项目也被添加到数据库中,但是当我回到第一种形式时,听起来好像什么也没发生。所以我将 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();

感谢大家的帮助!:)


摇曳的蔷薇
浏览 538回答 3
3回答

饮歌长啸

更新在包含组合框的主窗体中。我猜你的代码是这样的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;                    }        }    }此解决方案应该适用于您。

30秒到达战场

尝试这个: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";我希望这可以帮助你 :)

犯罪嫌疑人X

我所要做的就是填写 TableAdapter 然后刷新组合框:    tblTableAdapter.Fill(dsMy.tbl);     myComboBox.Refresh();
打开App,查看更多内容
随时随地看视频慕课网APP