Возникла задача загружать в 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);
}