我在winForm上有两个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<int, Model> 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 = "";
}
非常感谢你们 欢呼声
答案 0 :(得分:7)
而不是像这样手动添加项目:
foreach (Model objM in colM.Values)
{
cb_Model.Items.Add(objM);
}
让.NET为您处理它并将其替换为:
cb_Model.DataSource = colMValues;
将数据绑定到列表并在设置数据源时自动刷新组合框项目。
您也不再需要这些线条了:
// Clear Current Data
cb_Model.Text = "";
cb_Model.Items.Clear();
阅读此内容,了解有关绑定列表(和其他数据源)的更多信息,请访问ComboBoxes:
How to: Bind a Windows Forms ComboBox or ListBox Control to Data (MSDN)
答案 1 :(得分:6)
@ w69rdy提出了一个很好的解决方案。
cb_Model未更改 value
的原因是因为您从未更改过该值。 cb_Model.Items.Clear()不会更改所选索引;只有项目从组合框中删除。
使用问题中提供的代码示例:
// Clear Current Data
cb_Model.Text = "";
cb_Model.Items.Clear();
cb_Model.SelectedIndex = -1; // would effectively clear the previously selected value.
答案 2 :(得分:3)
我现在遇到同样的问题,Combobox的ResetText方法为我解决了这个问题
答案 3 :(得分:1)
这样可行
combobox.ResetText();
答案 4 :(得分:0)
我试过你的例子。对我而言,它应该有所作为。 您可以尝试将cb_model.SelectedText设置为“”或将SelectedItem设置为null
答案 5 :(得分:0)
我发现保持数据源的范围接近组合框的加载对我有用。我有一个具有类级别范围的数据表但它不清楚,但后来我将它带入功能级范围并在加载后清除它并且这有效。
答案 6 :(得分:0)
我有类似的问题,尝试过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(没什么,没什么)
我试图重新加载我的数据集,因此我的组合框。使用cmbstud.resettext只是清除文本而不是值。
答案 7 :(得分:0)
我遇到了同样的问题
combobox1.SelectedIndex=-1
它有效。