Добавить / удалить список <> элементов, выбранных в ListBox - PullRequest
1 голос
/ 28 марта 2012

У меня есть два списка, первый (справа) представляет список всех автомобилей, а второй (слева) - список автомобилей на продажу.

В моем контроле два списка, каждый из которых будетотобразить один из списка автомобилей.Я хочу нажать кнопку (<<), и выбранный автомобиль в ListBox 1 будет добавлен в список ListBox 1. </p>

Два списка созданы вне класса элемента управления, поэтому мне нужно привязать затем к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 ]

2 голосов
/ 28 марта 2012

После настройки источника данных вы не можете добавлять элементы в эту коллекцию.

"Коллекция элементов не может быть изменена, если установлено свойство DataSource."

Но вы можете сделать это с помощью некоторых обходных путей

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";
0 голосов
/ 28 марта 2012

Свяжите списки с источником данных, как вы это сделали.Затем удаляйте и добавляйте элементы в списки, а не в списки.

0 голосов
/ 28 марта 2012

Вы можете создавать свои собственные события для добавления и удаления элементов в списках.Обработайте эти события в своем классе управления, где вы определили комбинированные списки для добавления или удаления их элементов.

...