winforms C# -如何更新ComboBox

b1uwtaje  于 2023-10-23  发布在  C#
关注(0)|答案(4)|浏览(238)

我有一个表格,其中有DataGridViewcomboboxCombobox是通过属性菜单中的DataSource填充的,我还通过这个菜单指定了DisplayMember和ValueMember。我有一个按钮,当我点击它时,另一个表单会显示出来,我可以添加一个新的项目到我的组合框的数据源。当我关闭这个新表单时,我希望我的comobox的窗口刷新,我可以看到我刚刚添加到combobox中的新项目,但我不知道如何刷新。
我试过:

myComboBox.Refresh();

但什么也没发生
我还试了这个

myComboBox.Items.Add(myclass.myNewItem);

但它会抛出一个异常:
当设置了“设置”属性时,不能修改项目集合。
有人能帮帮我吗?

**编辑:**我发现当我在第二个表单中添加一个新项目时,一切都很好,新项目也添加到数据库中,但当我返回到第一个表单时,听起来什么也没发生。所以我把listBox添加到第二个表单,回到第一个表单后我什么也没看到。我真的不知道为什么组合框和listbox使用旧的目录,即使我的数据库改变了。然后我试了这个,它工作:

在第二个表单中,我将我的新项目保存在一个类中(名为transfer),当我返回到第一个表单时,我这样做:

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();

谢谢大家的帮助!:)

lrl1mhuk

lrl1mhuk1#

更新

在包含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;
                    }
        }
    }

这个解决方案应该对你有用。

yduiuuwa

yduiuuwa2#

试试这个:

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

希望这对你有帮助:)

cdmah0mi

cdmah0mi3#

只需要清除你的任务和清除项目,然后像这样刷新组合:

comboBox1.DataSource = null;
comboBox1.Items.Clear();
comboBox1.DataSource = DeviceLists;
comboBox1.ValueMember = "DeviceSerial";
comboBox1.DisplayMember = "DeviceSerial";
comboBox1.Refresh();
k97glaaz

k97glaaz4#

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

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

相关问题