急急急!!! 100分求ComboBox数据帮定后数据源的更新问题

时间:2022-11-09 20:43:00
问题是这样的,我有一个ComboBox绑定到一个LingToSql的数据源,在Form的Initialize方法里面调用
BindData()
{
this.comboBox.DisplayMember = "name";
this.comboBox.ValueMember = "id";
this.comboBox.DataSource = dbDataContext.Products;
}

然后当我在其它地方在Products中再插入一条数据的时候,重新调用BindData(),发现comboBox里面的选择项没有被更新,请问应该如何操作使comboBox会即时根据products里面的数据项更新?

29 个解决方案

#1


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

#2


帮顶一下

#3


up

#4


ding

#5


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

#6


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

#7


绑定以后要清空了再重新绑定

#8


引用 7 楼 Guyschaos 的回复:
绑定以后要清空了再重新绑定 
v

#9


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

#10


dbDataContext.Products有没有更新数据?

#11


BindData() 

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

这样试下。

#12


UP~

#13


引用 11 楼 foryouwife 的回复:
BindData() 

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

这样试下。


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

#14


BindData() 

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

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

#15


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

#16


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

#17


clear之后再绑定数据源~

#18


谢谢楼上各位,请各位大侠指教。

尝试了楼上的各种方法,还是没有解决问题.
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."

#19


#20


把问题描述的更简单一点,我要通过ComboBox显示一个Table<Product>中的一列,当在ComboBox中选择时,其SelectedValue是另一列的值。

现在的问题是当Product中的内容改变时,ComboBox中的内容不能得到及时改变。

请各位大侠指教,谢谢。

#21




改成这样试试
BindData() 

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





#22


多谢楼上,还是不行。

#23


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

#24


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

#25


急急急!!! 100分求ComboBox数据帮定后数据源的更新问题

#26


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

#27


已经读到本地了再绑定的,貌似不能更新吧.除非再重新读一下表......

#28


up

#29


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

给分结贴

#1


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

#2


帮顶一下

#3


up

#4


ding

#5


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

#6


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

#7


绑定以后要清空了再重新绑定

#8


引用 7 楼 Guyschaos 的回复:
绑定以后要清空了再重新绑定 
v

#9


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

#10


dbDataContext.Products有没有更新数据?

#11


BindData() 

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

这样试下。

#12


UP~

#13


引用 11 楼 foryouwife 的回复:
BindData() 

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

这样试下。


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

#14


BindData() 

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

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

#15


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

#16


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

#17


clear之后再绑定数据源~

#18


谢谢楼上各位,请各位大侠指教。

尝试了楼上的各种方法,还是没有解决问题.
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."

#19


#20


把问题描述的更简单一点,我要通过ComboBox显示一个Table<Product>中的一列,当在ComboBox中选择时,其SelectedValue是另一列的值。

现在的问题是当Product中的内容改变时,ComboBox中的内容不能得到及时改变。

请各位大侠指教,谢谢。

#21




改成这样试试
BindData() 

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





#22


多谢楼上,还是不行。

#23


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

#24


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

#25


急急急!!! 100分求ComboBox数据帮定后数据源的更新问题

#26


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

#27


已经读到本地了再绑定的,貌似不能更新吧.除非再重新读一下表......

#28


up

#29


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

给分结贴