当前位置:  开发笔记 > 编程语言 > 正文

C#更新绑定到通用列表的组合框

如何解决《C#更新绑定到通用列表的组合框》经验,为你挑选了1个好方法。

我的表单上有一个组合框,它绑定到一个通用的字符串列表,如下所示:

private List mAllianceList = new List();

private void FillAllianceList()
{
    // Add alliance name to member alliance list
    foreach (Village alliance in alliances)
    {
        mAllianceList.Add(alliance.AllianceName);
    }

    // Bind alliance combobox to alliance list
    this.cboAlliances.DataSource = mAllianceList;
}

然后,用户可以在组合框中添加或移除项目.
我在其他地方读到,通过简单地添加或删除通用列表中的项目,组合框的内容应该自动更新; 如果我对它使用Sort(),应该会发生同样的事情.
但由于某种原因,我无法做到这一点.我可以看到组合框的DataSource属性在添加/删除/排序项时正确更新,但组合框中显示的内容不是DataSource属性中的内容.

我肯定错过了什么或做错了什么.
提前致谢!

编辑:
我选择的答案解决了添加和删除的问题,但BindingList对象无法排序,这对我来说是必要的.我找到了一个解决方案,通过继承BindingList和添加排序功能来构建自定义类,但我想知道在我的情况下是否有更简单的解决方案.
关于如何轻松解决这个问题的任何建议?



1> BFree..:

最简单的方法是简单地使用BindingList,如下所示:

private List mAllianceList = new List();
private BindingList bindingList;    

private void FillAllianceList()
{
    // Add alliance name to member alliance list
    foreach (Village alliance in alliances)
    {
        mAllianceList.Add(alliance.AllianceName);
    }

    bindingList = new BindingList(mAllianceList);

    // Bind alliance combobox to alliance list
    this.cboAlliances.DataSource = bindingList;
}

然后,从现在开始,只需处理绑定列表即可添加和删除项目.这将从List和ComboBox中删除它.

编辑:为了回答你关于排序的问题,我想最简单的(但可能是"hacky")方式是这样的:

mAllianceList.Sort();
bindingList = new BindingList(mAllianceList);
this.cboAlliances.DataSource = bindingList;

所以基本上,排序后,您创建一个新的绑定列表并重置数据源.也许有更优雅的方式来解决这个问题,但这应该有效.


我有一个类似的问题,将ComboBox DataSource链接到List <>(但使用List 而不是List ).我尝试了这个解决方案,但在向List <>添加新项目时遇到了问题(即没有更新).我完全错过了List <>,并将项直接添加到BindingList <>.
推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有