Combobox的BindingList数据源正确刷新,但Combobox以错误的顺序显示项目

时间:2013-06-09 18:55:34

标签: c# combobox bindinglist

我有BindingList< KeyValuePair < string, string > >绑定到ComboBox控件。根据某些条件,BindingList将添加新的KeyValuePair。现在,新添加的项目显示在Combobox的索引0处,而不是在结尾处。

调试时,我发现BindingList的顺序正确。 (即附加新的KeyValuePair

另外,我检查了SelectedValue处理程序中ComboBox的{​​{1}},它似乎不是被选中的SelectedIndexChanged。相反,它是假定的ListItem,如果ListItem得到了正确的顺序{ - 1}},那么ComboBox ..

代码是大型项目的一小部分。如果问题不明确,请告诉我。我可以根据我们的上下文放置代码的相关部分。

这样的事情怎么会发生?我能做些什么不同的事情?

我有这样的课程。

DataSource

在我的Windows窗体中,我有一个带有多个标签的标签控件。在其中一个标签页中,我有一个DataGridView。用户应该编辑单元格并单击下一步 - 按钮。然后,将完成一些处理,TabControl将导航到下一个标签页。

下一个标签页的组合框有我提到的问题。此页面还有一个后退按钮,它将取回..用户可以再次修改gridview单元格..然后单击下一步按钮。这是订单混乱的时候。

我在这里发布了Next Button的Click事件处理程序..与该类一起,删除了其余的代码。

BindingList

用户第一次点击“下一步”按钮时,没问题。但是,如果他再次单击“后退”按钮并更改“数据网格视图”单元格,则订单将会消失。

我知道,看起来令人沮丧。寻求帮助是一件很大的事情。任何帮助将不胜感激!

如果您需要在任何部分进行详细说明,请告诉我。

非常感谢:)

2 个答案:

答案 0 :(得分:1)

我认为你有两个问题。

首先,如果您想保留项目的顺序,则应使用OrderedDictionary而不是常规项目。使用Remove方法时,普通集合不会保留项目的顺序。您可以看到与此列表here相关的更多信息。

你可以使用这样的字典:

DropDownDict = new OrderedDictionary();
// Add method will work as expected (as you have it now)

// Below you have to cast it before using Select
DropDownCollection = new BindingList<KeyValuePair<string, string>>(DropDownDict.Cast<DictionaryEntry>().Select(kvp => new KeyValuePair<string, string>(kvp.Key.ToString(), kvp.Value.ToString())).ToList());

第二个问题可能是您更改了现有项目的显示名称(FrontEndName),但密钥仍然保留。添加新项目时,请尝试删除不再使用的旧项目并添加新项目。

答案 1 :(得分:1)

Combobox的Sorted属性设置为True!直到现在我都没检查过。我搞砸了。非常抱歉浪费你的时间阿德里安。非常感谢你忍受我的烂摊子...... :)