在重新启动应用程序之前,Data Bound ComboBox不会更新

时间:2013-03-13 18:47:25

标签: c# combobox

using (SqlConnection con = new SqlConnection(cons))
{
    con.Open();
    using (SqlCommand com = new SqlCommand("INSERT INTO Dealers (DealerId,DealerName) values (NEXT VALUE FOR Dealers_DealerId_SEQ,@dname)", con))
    {
        com.Parameters.AddWithValue("@dname", this.ComboText.Text.ToString());
        com.ExecuteNonQuery();
    }
    con.Close();
}

此代码更新向combox提供数据的表。它会很好地更新数据库,但不会更新应用程序下拉列表,直到重新启动应用程序。任何帮助将不胜感激。

this.Dealers.DataSource = this.dealersBindingSource; this.Dealers.DisplayMember = "DealerName"; this.Dealers.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.Dealers.Name = "Dealers"; this.Dealers.Size = new System.Drawing.Size(121, 21); this.Dealers.ValueMember = "DealerName";

这是与组合框有关的代码。

2 个答案:

答案 0 :(得分:0)

上面显示的代码仅更新数据库。我不知道您的数据源看起来如何,但无论如何您都必须将其重新分配给您的下拉控件。

如果您的数据源是List<T>,则将新项目同时添加到列表中,或者从数据库重新加载列表。如果您将同一列表重新分配到DataSource,则必须先将null分配给DataSource,否则下拉列表将不会发现更改。

您还可以使用BindingList。对BindingList的更改将自动更新下拉列表。

如果数据源是数据集,则必须重新查询数据集,即必须重新读取数据库中的数据。

答案 1 :(得分:0)

您需要重新加载组合框。

假设您使用此方法填充组合框

public void LoadCb()
{
    SqlConnection cn = new SqlConnection("connectionstring");
    SqlDataAdapter da = new SqlDataAdapter("select DealerId, DealterName from Dealers", cn);
    DataTable dt = new DataTable();
    da.Fill(dt);
    comboBox1.DataSource = dt;
    comboBox1.DisplayMember = "DealerName";
    comboBox1.ValueMember = "DealerId";
}

然后你必须在经销商表中插入值后调用LoadCb方法