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

此代码更新为组合框提供数据的表。在重新启动应用程序之前,它会很好地更新数据库,但不会更新应用程序下拉列表。任何帮助将不胜感激。

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

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

4

2 回答 2

0

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

如果您的数据源是一个,List<T>那么要么将新项目与数据库同时添加到列表中,要么从数据库中重新加载列表。如果您将相同的列表重新分配给DataSource您之前必须分配nullDataSource,否则下拉列表不会注意到更改。

您也可以使用BindingList. 对 的更改BindingList将自动更新下拉菜单。

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

于 2013-03-13T18:56:14.800 回答
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 方法

于 2013-03-13T18:57:33.507 回答