Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#-如何更新组合框_C#_Winforms_Combobox - Fatal编程技术网

c#-如何更新组合框

c#-如何更新组合框,c#,winforms,combobox,C#,Winforms,Combobox,我有一个带有DataGridView和组合框的表单组合框通过属性菜单中的数据源填充,我也通过此菜单指定DisplayMember和ValueMember。 我有一个按钮,当我点击它时,另一个窗体将显示,我可以向我的组合框的数据源添加一个新项。 当我关闭这个新表单时,我希望我的comobox的数据源能够刷新,这样我就可以看到我刚刚添加到combobox中的新项,但我不知道怎么做 我试过: myComboBox.Refresh(); 但什么也没发生 我也试过: myComboBox.Items.A

我有一个带有
DataGridView
组合框的表单<代码>组合框
通过属性菜单中的数据源填充,我也通过此菜单指定DisplayMember和ValueMember。 我有一个按钮,当我点击它时,另一个窗体将显示,我可以向我的组合框的数据源添加一个新项。 当我关闭这个新表单时,我希望我的comobox的数据源能够刷新,这样我就可以看到我刚刚添加到combobox中的新项,但我不知道怎么做

我试过:

myComboBox.Refresh();
但什么也没发生

我也试过:

myComboBox.Items.Add(myclass.myNewItem);
但它抛出了一个例外:

设置datasource属性时,无法修改items集合

有人能帮我吗

编辑: 我发现,当我在第二个表单中添加一个新项目时,一切都很好,新项目也被添加到数据库中,但当我返回到第一个表单时,听起来好像什么都没发生。所以我把listBox添加到第二个表单中,在返回到第一个表单后,我没有看到任何添加。我真的不知道为什么combobox和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();
谢谢大家的帮助!:)

更新 在包含组合框的主窗体中。我猜你的代码是这样的

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;
                    }
        }
    }
在另一种形式上,您的代码将是这样的

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;
                    }
        }
    }
这个解决方案应该适合您

试试这个:

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

我希望这对您有所帮助:)

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

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

看一看:另一个:谢谢你的帮助,但对我不起作用。对于这两个链接,它不起作用?请看一看:如果这没有解决您的答案,那么请发布您的标记和代码隐藏代码,然后将尝试它。这是正确的,但即使我找到了解决方案,但我仍然不明白为什么在第一种形式中,我的组合框仍然使用旧数据源,尽管我的数据库已升级。如果您绑定到数据源,请小心如果未实现IBindingList接口,例如ArrayList,则在更新数据源时绑定控件的数据将不会更新。我建议查看该链接如果此答案或任何答案正确,请将其标记为正确答案。