我正在使用具有多个组合框的Windows窗体。根据在第一个组合框中选择的内容,确定哪些项目填充到第二个组合框中。我遇到的问题是如果我在ComboBox1中选择ChoiceA,ComboBox2是clear()ed,则填充ChoiceX,ChoiceY和ChoiceZ。然后我在ComboBox1中选择ChoiceB,ComboBox2是clear()ed,但是没有选择添加到ComboBox2,所以它应该保持为空。问题是,在选择ChoiceB之后,ComboBox2中有一个带有三个空插槽的大白框。所以,基本上,无论多少项都被清除N,那就是选择ChoiceB后会显示多少个空槽。
这可能有点令人困惑,我希望我解释得很好。
- 编辑添加代码,希望它有助于澄清问题。 BTW,mainItemInfo是另一个“viewmodel”类型类。它返回到表单中以进行更新。
private void cmbType_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownItem item = (DropDownItem)cmbType.SelectedItem;
if (!String.IsNullOrWhiteSpace(item.Text))
{
cmbBrand.Enabled = true;
btnAddBrand.Enabled = true;
mainItemInfo.FillBrands(new Dictionary<string, string> { { "Type", item.Text } });
mainItemInfo.SyncBrands(this);
}
}
public void FillBrands(Dictionary<string, string> columnsWhere)
{
// Clear list
Brands.Clear();
// Get data
StorageData storage = new StorageData(File.ReadAllLines(ItemsFilePath));
// Fill Brands
foreach (string type in storage.GetDistinctWhere(columnsWhere, "Brand"))
{
Brands.Add(type, new DropDownItem(type, type));
}
}
public void SyncBrands(IPopupItemInfo form)
{
form.ClearcmbBrand();
var brands = from brand in Brands.Keys
orderby Brands[brand].Text ascending
select brand;
foreach (var brand in brands)
{
form.AddTocmbBrand(Brands[brand]);
}
}
public void AddTocmbBrand(DropDownItem brand)
{
cmbBrand.Items.Add(brand);
}
public void ClearcmbBrand()
{
cmbBrand.Items.Clear();
}
答案 0 :(得分:3)
简单地说,您可以添加一个项目,然后再次清除组合框:
cmbBrand.Items.Clear();
cmbBrand.Items.Add(DBNull.Value);
cmbBrand.Items.Clear();
答案 1 :(得分:1)
您应该能够将listbox2的数据源设置为null以清除它,然后使用新数据再次设置它。
因此,在伪代码中,类似于:
ItemSelectedInListBox1()
{
List futureListbox2Items = LoadOptionsBaseOnSelectedItem(item)
Listbox2.Datasource = null
Listbox2.Datasource = futureListBox2Items
}
这应该刷新Listbox2中显示的没有空格的项目列表。
答案 2 :(得分:1)
我能够修复额外的空间。我将Add和Clear方法更改为:
public void AddTocmbModel(DropDownItem model)
{
cmbModel.Items.Add(model);
cmbModel.DropDownHeight = cmbModel.ItemHeight * (cmbModel.Items.Count + 1);
}
public void ClearcmbModel()
{
cmbModel.Items.Clear();
cmbModel.DropDownHeight = cmbModel.ItemHeight;
}