我有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
用户第一次点击“下一步”按钮时,没问题。但是,如果他再次单击“后退”按钮并更改“数据网格视图”单元格,则订单将会消失。
我知道,看起来令人沮丧。寻求帮助是一件很大的事情。任何帮助将不胜感激!
如果您需要在任何部分进行详细说明,请告诉我。
非常感谢:)
答案 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!直到现在我都没检查过。我搞砸了。非常抱歉浪费你的时间阿德里安。非常感谢你忍受我的烂摊子...... :)