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
它的工作原理。