问题是这样的,我有一个ComboBox绑定到一个LingToSql的数据源,在Form的Initialize方法里面调用
BindData()
{
this.comboBox.DisplayMember = "name";
this.comboBox.ValueMember = "id";
this.comboBox.DataSource = dbDataContext.Products;
}然后当我在其它地方在Products中再插入一条数据的时候,重新调用BindData(),发现comboBox里面的选择项没有被更新,请问应该如何操作使comboBox会即时根据products里面的数据项更新?
BindData()
{
this.comboBox.DisplayMember = "name";
this.comboBox.ValueMember = "id";
this.comboBox.DataSource = dbDataContext.Products;
}然后当我在其它地方在Products中再插入一条数据的时候,重新调用BindData(),发现comboBox里面的选择项没有被更新,请问应该如何操作使comboBox会即时根据products里面的数据项更新?
再次调用BINDDATA的时候,是否Products中的值已经传了过来!
{
this.comboBox.clear();
this.comboBox.DisplayMember = "name";
this.comboBox.ValueMember = "id";
//重新获取dbDataContext.Products
this.comboBox.DataSource = dbDataContext.Products;
}
这样试下。
对,先this.combBox.clear()一下.
{
this.comboBox.clear();
this.comboBox.DisplayMember = "name";
this.comboBox.ValueMember = "id";
//重新获取dbDataContext.Products
this.comboBox.DataSource = dbDataContext.Products;
}
BindData()
这个应该还有重新调用一下吧。最好还是自己写个,这样直接绑定,过程不能很好的控制
1. dbDataContext.Products已经是更新过的数据了吗?
是的,在其它地方添加时就更新了。为了确保,对this.comboBox.DataSource = dbDataContext.Products; 加了个断点,发现确实是更新后的数据。2. 尝试了如下代码,还是不行。
this.comboBox.DataSource = null;
this.comboBox.DisplayMember = "name";
this.comboBox.ValueMember = "id";
this.comboBox.DataSource = dbDataContext.Products;
this.comboBox.Refresh();3. 发现comboBox没有clear方法,如果用comboBox.Items.Clear()方法,在运行时会有ArgumentException, "Items collection cannot be modified when the DataSource property is set."
BindData()
{
this.comboBox.DataSource = dbDataContext.Products;
this.comboBox.DisplayMember = "name";
this.comboBox.ValueMember = "id"; }
this.comboBox1.DataSource = null;
this.comboBox1.DataSource = testDataSet.Tables[0];
this.comboBox1.DisplayMember = "qq";
this.comboBox1.ValueMember = "ww";
我是直接在数据源项上添加一条数据的,什么都不用改,combox1就直接更新了。
就是把数据源里的几列直接拖放到窗体里,然后在里面添加,你可以尝试一下。但是如果要是手动在数据表里添加一条记录的话,就不行了。重新绑定也不行。
除非重新加载数据源。如是:
private void button1_Click(object sender, EventArgs e)
{
DataSet ds = new DataSet();
string strConn = string.Empty;
strConn = @"Data Source = .\SQLExpress;" + "Initial Catalog=test;Integrated Security=true;";
string strSQL = string.Empty;
strSQL = "select * from ff";
SqlDataAdapter da = new SqlDataAdapter(strSQL, strConn);
da.Fill(ds);
DataTableReader dtr = ds.CreateDataReader();
this.testDataSet.Clear();
this.testDataSet.Load(dtr, LoadOption.Upsert, "ff");
this.comboBox1.DataSource = null;
this.comboBox1.DataSource = testDataSet.Tables[0];
this.comboBox1.DisplayMember = "qq";
this.comboBox1.ValueMember = "ww";
}