Источник данных DevExpress ComboBoxEdit

Я использую DevExpress ComboBoxEdit, и мне нужно привязать список к его источнику данных. Но, как я вижу, нет способа добавить источник данных для управления, поэтому я добавил каждый элемент для управления один за другим, например

foreach (var item in list) {
    comboBoxEdit1.Properties.Items.Add(item);
}

Это сработало, но работает медленно, если данных много.
Есть ли способ напрямую привязать список к элементу управления?


person user1688313    schedule 21.09.2012    source источник


Ответы (3)


Невозможно привязать ComboBoxEdit напрямую к источнику данных, потому что ComboBoxEdit предназначен для использования, когда вам нужен простой предопределенный набор значений. Используйте LookUpEdit, когда вам нужно использовать источник данных.
Вы можете использовать ComboBoxItemCollection.BeginUpdate и ComboBoxItemCollection.EndUpdate для предотвращения чрезмерных обновлений при изменении коллекции элементов:

ComboBoxItemCollection itemsCollection = comboBoxEdit1.Properties.Items;
itemsCollection.BeginUpdate();
try {
    foreach (var item in list) 
        itemsCollection.Add(item);
}
finally {
    itemsCollection.EndUpdate();
}
person DmitryG    schedule 24.09.2012

Вот еще один подход к массовому добавлению элементов в поле со списком с использованием однострочного linq:

  comboBoxEdit1.Properties.Items.AddRange(newItems.Select(x => x.SomeStringPropertyHere as object).ToArray());

Метод .AddRange() обеспечивает внутренний вызов BeginUpdate()/EndUpdate().

person XDS    schedule 27.05.2016
comment
Хорошо, я выбрал: MyCollection.ForEach(i =›this.comboBox.Properties.Items.Add(i)); - person ManxJason; 30.04.2017
comment
Я боюсь, что вызов метода .Add() для каждого элемента приведет к тому, что BeginUpdate()/EndUpdate() будет вызываться N раз (где N — количество элементов в коллекции), а не только один раз, как при использовании AddRange( ). Рассылка спама BeginUpdate()/EndUpdate() * N отрицательно влияет на производительность больших коллекций из-за повторных вызовов. Только мой 2с. - person XDS; 25.03.2020

И еще один подход - через метод расширения:

    public static ComboBoxEdit AddItemsToCombo(this ComboBoxEdit combo, IEnumerable<object> items)
    {
        items.ForEach(i => combo.Properties.Items.Add(i));
        return combo;
    }
person ManxJason    schedule 30.04.2017