ComboBox在Clear()之后具有旧值

我在cb_Model上有两个comboBox cb_Brand和cb_Model。

cb_Model填充品牌Select的值。 问题是:如果我们选择任何品牌并选择该品牌下的任何型号, cb_Model不会松开之前选择的型号的价值。 例如:如果我们选择奥迪和A3型品牌并选择品牌福特,当我点击cb_Model选择模型时,它会将A3显示为所选模型,但列表中的其他模型仍属于福特。

我的代码是:

 private void cb_Brand_SelectedIndexChanged(object sender, EventArgs e) { // Clear Current Data cb_Model.Text = ""; cb_Model.Items.Clear(); CarModel _carmodel = new CarModel (); // Get Selected Car Brnad int CarBrandID = _carmodel .GetCarBrandID(cb_Brand.Text); //Enable choice of Model SortedList colM; colM = Model.ReadModel(CarBrandID); cb_Model.DisplayMember = "ModelText"; foreach (Model objM in colM.Values) { cb_Model.Items.Add(objM); } } 

任何想法请..谢谢


无法找到原因,但使用临时修复程序进行了整理:

 private void cb_Model_Click(object sender, EventArgs e) { cb_Model.Text = ""; } 

非常感谢你们欢呼

而不是手动添加项目,如下所示:

 foreach (Model objM in colM.Values) { cb_Model.Items.Add(objM); } 

让.NET为您处理它并将其替换为:

 cb_Model.DataSource = colMValues; 

这将把数据绑定到列表并在设置数据源时自动刷新combobox项。

你也不再需要这些线了:

 // Clear Current Data cb_Model.Text = ""; cb_Model.Items.Clear(); 

有关绑定列表(和其他数据源)到ComboBoxes的更多信息,请阅读此内容:

如何:将Windows窗体ComboBox或ListBox控件绑定到数据(MSDN)

@ w69rdy提出了一个很好的解决方案。

cb_Model没有改变它的value的原因是因为你从未改变过这个值。 cb_Model.Items.Clear()不会更改所选索引; 只有项目从combobox中删除。

使用问题中提供的代码示例:

 // Clear Current Data cb_Model.Text = ""; cb_Model.Items.Clear(); cb_Model.SelectedIndex = -1; // would effectively clear the previously selected value. 

我现在遇到同样的问题,Combobox的ResetText方法为我解决了这个问题

这会奏效

 combobox.ResetText(); 

我试过你的例子。 对我来说,它应该有所作为。 您可以尝试将cb_model.SelectedText设置为“”或将SelectedItem设置为null

我发现保持数据源的范围接近combobox的加载对我有用。 我有一个具有类级别范围的数据表但它不清楚,但后来我将它带入function级范围并在加载后清除它并且这有效。

我有一个类似的问题,尝试cmb.resettext它清除文本但不是值。在我的加载表单中我有以下代码: Dim cmd As New SqlCommand("SELECT stud_id,name FROM student_details WHERE stud_id NOT IN (SELECT stud_id FROM student_details WHERE hostel_id!=0)", sqlcont.Conn) Dim dr As SqlDataReader = cmd.ExecuteReader Dim dat As New DataTable Dim j As Integer For j = 0 To dat.Rows.Count - 1 dr.Read() Next dat.Load(dr) cmbstud.DisplayMember = "name" cmbstud.ValueMember = "stud_id" cmbstud.DataSource = New BindingSource(dat, Nothing) dr.Close()在我的btnhostel点击事件中,我有以下代码:frmallocateHostel_Load(Nothing,Nothing)this我试图重新加载我的数据集,因此我的combobox。使用cmbstud.resettext只是清除文本而不是值。

我遇到了同样的问题

 combobox1.SelectedIndex=-1 

它的工作原理。