【问题标题】:DevExpress ComboBoxEdit datasourceDevExpress ComboBoxEdit 数据源
【发布时间】:2012-09-13 16:54:04
【问题描述】:

我正在使用 DevExpress ComboBoxEdit,我需要将列表绑定到它的数据源。但是正如我所见,没有方法可以添加数据源来控制,所以我像添加了每个项目来控制一样

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

它有用,但如果有很多数据,它会很慢。
有没有办法可以直接绑定列表来控制?

【问题讨论】:

    标签: c# winforms devexpress


    【解决方案1】:

    没有办法将 ComboBoxEdit 直接绑定到数据源,因为 ComboBoxEdit 设计为在您需要一组简单的预定义值时使用。当您需要使用数据源时,请使用LookUpEdit
    您可以使用ComboBoxItemCollection.BeginUpdateComboBoxItemCollection.EndUpdate 方法来防止在更改项目集合时过度更新:

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

    【讨论】:

      【解决方案2】:

      这是另一种使用 linq one-liner 将项目整体添加到组合框的方法:

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

      .AddRange() 方法负责在内部调用 BeginUpdate()/EndUpdate()。

      【讨论】:

      • 很好,我选择了:MyCollection.ForEach(i => this.comboBox.Properties.Items.Add(i));
      • 恐怕对每个项目调用 .Add() 方法会导致 BeginUpdate()/EndUpdate() 被调用 N 次(其中 N 是集合中的项目数)与使用 AddRange() 时一样。由于上述重复调用,垃圾邮件 BeginUpdate()/EndUpdate() * N 对“大型”集合的性能产生负面影响。只是我的 2c。
      【解决方案3】:

      另一种方法是通过扩展方法:

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

      【讨论】:

        猜你喜欢
        • 2013-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-19
        相关资源
        最近更新 更多