为了账号安全,请及时绑定邮箱和手机立即绑定

c# - 如何更新 ComboBox

c# - 如何更新 ComboBox

C#
摇曳的蔷薇 2021-11-28 19:27:53
我有一个带有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();感谢大家的帮助!:)
查看完整描述

3 回答

?
饮歌长啸

TA贡献1951条经验 获得超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;

                    }

        }

    }

此解决方案应该适用于您。


查看完整回答
反对 回复 2021-11-28
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

尝试这个:


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";

我希望这可以帮助你 :)


查看完整回答
反对 回复 2021-11-28
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

我所要做的就是填写 TableAdapter 然后刷新组合框:

    tblTableAdapter.Fill(dsMy.tbl);
    myComboBox.Refresh();


查看完整回答
反对 回复 2021-11-28
  • 3 回答
  • 0 关注
  • 536 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信