Sco*_*ion 8 .net c# combobox winforms
我有两个comboBox cb_Brand和cb_Model一个winForm.
cb_Model填充品牌选择的价值.问题是:如果我们选择任何品牌并选择该品牌下的任何型号,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);
}
}
Run Code Online (Sandbox Code Playgroud)
任何想法请..谢谢
无法找到原因,但使用临时修复程序进行了整理:
private void cb_Model_Click(object sender, EventArgs e)
{
cb_Model.Text = "";
}
Run Code Online (Sandbox Code Playgroud)
非常感谢你们欢呼
而不是像这样手动添加项目:
foreach (Model objM in colM.Values)
{
cb_Model.Items.Add(objM);
}
Run Code Online (Sandbox Code Playgroud)
让.NET为您处理它并将其替换为:
cb_Model.DataSource = colMValues;
Run Code Online (Sandbox Code Playgroud)
这将把数据绑定到列表并在设置数据源时自动刷新组合框项.
你也不再需要这些线了:
// Clear Current Data
cb_Model.Text = "";
cb_Model.Items.Clear();
Run Code Online (Sandbox Code Playgroud)
有关绑定列表(和其他数据源)到ComboBoxes的更多信息,请阅读此内容:
如何:将Windows窗体ComboBox或ListBox控件绑定到数据(MSDN)
@ 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.
Run Code Online (Sandbox Code Playgroud)