添加/删除列表<>在ListBox中选择的项目

时间:2012-03-28 12:20:38

标签: c# list combobox

我有两个列表,第一个(右)代表所有汽车的列表,而secound(左)代表一个待售汽车列表。

我的控件中有两个ListBox,每个ListBox都会显示一个汽车列表。我想点击一个按钮(<<<),ListBox 1中的选定汽车将被添加到ListBox 1列表中。

这两个列表是在控件类之外创建的,所以我需要绑定到ListBoxes。我曾尝试使用DataSource,但如果我设置它,则无法使用Add Remove from Items。哪种方法最好?

enter image description here

感谢。

OBS:我已经改为ListBox。


我正在使用的解决方案是:非常非常丑陋的解决方案......:/

    public IList<Item> ItensToMaintaim
    {
        get { return (IList<Item>)this.itensToMainTainList.DataSource; }
        set
        {
            //Need to set null to refresh
            this.itensToMainTainList.DataSource = null;
            this.itensToMainTainList.DataSource = value;
            this.itensToMainTainList.DisplayMember = "Name";
            this.itensToMainTainList.ValueMember = "Name";
        }
    }

    public IList<Item> Itens
    {
        get { return (IList<Item>)this.itensList.DataSource; }
        set
        {
            //Need to set null to refresh
            this.itensList.DataSource = null;
            this.itensList.DataSource = value;
            this.itensList.DisplayMember = "Name";
            this.itensList.ValueMember = "Name";
        }
    }

    private void removeItem_Click(object sender, EventArgs e)
    {
        if (this.itensToMainTainList.SelectedItem != null)
        {
            this.itens2.Remove((Item)this.itensToMainTainList.SelectedItem);
            this.ItensToMaintaim = this.itens2;
            if (this.itensToMainTainList.SelectedIndex < 0)
            {
                this.itensToMainTainList.SelectedIndex = this.itens2.Count - 1;
            }
        }
    }

    private void addItem_Click(object sender, EventArgs e)
    {
        if (this.itensList.SelectedItem != null)
        {
            bool contains = false;
            contains = this.itens2.Contains(this.itensList.SelectedItem);
            if (!contains)
            {
                this.itens2.Add((Item)this.itensList.SelectedItem);
                this.ItensToMaintaim = this.itens2;
            }
            if (this.itensList.SelectedIndex < this.itens1.Count - 1)
            {
                this.itensList.SelectedIndex++;
            }
        }
    }

3 个答案:

答案 0 :(得分:2)

设置DataSource后,您无法向该集合添加项目。

"Items collection cannot be modified when the DataSource property is set."

但你可以通过一些解决方法

来做到这一点

1)保存到数据库并使用新值重新加载并绑定它

OR

2)获取列表框的现有数据源并将其存储在变量中并添加一个新项目(从所选项目创建)然后重新绑定它

示例(这些类特定于我的需要,您可以根据您的类结构进行自定义)

    //Take the existing
    List<MailerKit> objExisting = (List<MailerKit>)comboBox1.DataSource;
    //Add the new one
    objExisting.Add(new MailerKit { KitName = comboBox1.SelectedText, ID = Convert.ToInt32(comboBox1.SelectedValue) });

    //Rebind again
    comboBox1.DataSource = objExisting;
    comboBox1.DisplayMember = "KitName";
    comboBox1.ValueMember = "ID";

答案 1 :(得分:0)

您可以创建自定义事件,以便在列表中添加和删除项目。在控件类中处理这些事件,您已在其中定义了组合框以添加或删除其项目。

答案 2 :(得分:0)

将数据源与数据源绑定在一起。然后删除并添加项目到列表,而不是组合自己。