Возникла задача загружать в LookUpEdit значения постепенно, в зависимости от подстроки.
Простейшее решение было найдено на сайте самого DX. Решение прекрасно работает, но дело в том, что поиск в LookUpEdit не поддерживает contains и ищет с начала строки. В примере это решено дописыванием к началу строки искомой подстроки:
private void GetAutoCompleteList(AutoCompleteListEventArgs e) { e.AutoCompleteList.Clear(); for(int i = 0; i < 10; i++) { e.AutoCompleteList.Add(String.Format("{0}{1}", e.AutoSearchText, RandomString(5, true))); } }Выглядит это некрасиво. Поэтому что бы не показывать лишние данные нужно внедрить contains.
Для этого переопределим DataAdapter. Пример на VB был найдет здесь и осталось только переписать его на C#.
Сам DataAdapter:
public class MyLookUpListDataAdapter : LookUpListDataAdapter { public MyLookUpListDataAdapter(AutoCompleteLookUpEditRepositoryItem item) : base(item) { } public override string FilterField { get { if ((Item as AutoCompleteLookUpEditRepositoryItem).FilterField == string.Empty) { return base.FilterField; } return (Item as AutoCompleteLookUpEditRepositoryItem).FilterField; } } protected override string CreateFilterExpression() { dynamic foo = FilterField; if (string.IsNullOrEmpty(FilterPrefix)) { return string.Empty; } string likeClause = DevExpress.Data.Filtering.Helpers.LikeData.CreateStartsWithPattern(FilterPrefix); return new BinaryOperator(FilterField, "%" + likeClause + "%", BinaryOperatorType.Like).ToString(); } }Так нужно внести изменения в класс AutoCompleteLookUpEditRepositoryItem:
public string FilterField { set; get; } protected override LookUpListDataAdapter CreateDataAdapter() { return new MyLookUpListDataAdapter(this); }