问题是这样的,我有一个ComboBox绑定到一个LingToSql的数据源,在Form的Initialize方法里面调用
BindData()
{
this.comboBox.DisplayMember = "name";
this.comboBox.ValueMember = "id";
this.comboBox.DataSource = dbDataContext.Products;
}然后当我在其它地方在Products中再插入一条数据的时候,重新调用BindData(),发现comboBox里面的选择项没有被更新,请问应该如何操作使comboBox会即时根据products里面的数据项更新?

解决方案 »

  1.   

    dbDataContext.Products已经是更新过的数据了吗?
      

  2.   

    先确定你的数据虽然更新了 但是dbDataContext.Products更新了没有。
      

  3.   

    可以设置断点跟踪一下,在你在其它地方在Products中再插入一条数据的时候,看看是否插进去了,
    再次调用BINDDATA的时候,是否Products中的值已经传了过来!
      

  4.   

    同意楼上的方法,加断点,看看products里面的数据是否加入,如果已经加入,comboBox仍然没有更新的话,可以尝试加this.refresh();语句让控件更新。我以前遇到这样的问题是这样子解决的 ,不知道是否试用你的程序~
      

  5.   

    dbDataContext.Products有没有更新数据?
      

  6.   

    BindData() 

    this.comboBox.clear();
    this.comboBox.DisplayMember = "name"; 
    this.comboBox.ValueMember = "id"; 
    //重新获取dbDataContext.Products
    this.comboBox.DataSource = dbDataContext.Products; 

    这样试下。
      

  7.   


    对,先this.combBox.clear()一下.
      

  8.   

    BindData() 

    this.comboBox.clear(); 
    this.comboBox.DisplayMember = "name"; 
    this.comboBox.ValueMember = "id"; 
    //重新获取dbDataContext.Products 
    this.comboBox.DataSource = dbDataContext.Products; 

    BindData()
    这个应该还有重新调用一下吧。最好还是自己写个,这样直接绑定,过程不能很好的控制
      

  9.   

    在combobox的Leave事件中加入EndEdit()试一下。
      

  10.   

    看调用的时候dbDataContext.Products是否已经更新了
      

  11.   

    谢谢楼上各位,请各位大侠指教。尝试了楼上的各种方法,还是没有解决问题.
    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."
      

  12.   

    把问题描述的更简单一点,我要通过ComboBox显示一个Table<Product>中的一列,当在ComboBox中选择时,其SelectedValue是另一列的值。现在的问题是当Product中的内容改变时,ComboBox中的内容不能得到及时改变。请各位大侠指教,谢谢。
      

  13.   

    改成这样试试
    BindData() 

    this.comboBox.DataSource = dbDataContext.Products; 
    this.comboBox.DisplayMember = "name"; 
    this.comboBox.ValueMember = "id"; } 
      

  14.   

    那就this.comboBox1.Update();一下然后再绑定
      

  15.   

    你绑定的有问题,我尝试了一下,显示很正常。
     this.comboBox1.DataSource = null;
                this.comboBox1.DataSource = testDataSet.Tables[0];
                this.comboBox1.DisplayMember = "qq";
                this.comboBox1.ValueMember = "ww";
      

  16.   

    不好意思,搞错掉了。因为不能传图片,所以不能看到刚才我做的例子,
    我是直接在数据源项上添加一条数据的,什么都不用改,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";
            }
      

  17.   

    谢谢各位的帮助,虽然我最终还是没有成功,所以我打算放弃用绑定。直接在Items里面加内容,然后根据SelectedIndex定位到具体对象...给分结贴