我正在使用 DevExpress ComboBoxEdit,我需要将列表绑定到它的数据源。但是正如我所见,没有方法可以将数据源添加到控件中,因此我将每个项添加到控件中,例如
foreach (var item in list) {
comboBoxEdit1.Properties.Items.Add(item);
}
它有效,但如果有大量数据,它会很慢。
有没有办法可以直接绑定列表来控制?
我正在使用 DevExpress ComboBoxEdit,我需要将列表绑定到它的数据源。但是正如我所见,没有方法可以将数据源添加到控件中,因此我将每个项添加到控件中,例如
foreach (var item in list) {
comboBoxEdit1.Properties.Items.Add(item);
}
它有效,但如果有大量数据,它会很慢。
有没有办法可以直接绑定列表来控制?
无法将 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();
}
这是使用 linq one-liner 将项目整体添加到组合框的另一种方法:
comboBoxEdit1.Properties.Items.AddRange(newItems.Select(x => x.SomeStringPropertyHere as object).ToArray());
.AddRange() 方法负责在内部调用 BeginUpdate()/EndUpdate()。
另一种方法是通过扩展方法:
public static ComboBoxEdit AddItemsToCombo(this ComboBoxEdit combo, IEnumerable<object> items)
{
items.ForEach(i => combo.Properties.Items.Add(i));
return combo;
}