решение фильтра devexpress gridview - PullRequest
2 голосов
/ 15 июля 2011

У меня есть devexpress gridview на моей странице asp.net, в которой есть строка фильтра. Мне нужна встроенная функция, чтобы отфильтровать первые буквы, а не буквы между ними.

Так что "Са" найдет "Самуила", но не "Дядя Сэм". Для поиска по «Дяде Сэму» мне нужно использовать% sa%. Мои клиенты этого не хотят.

Я нашел решение, которое требует от меня использования Settings-AutoFilterCondition = "Contains" для каждого поля в виде сетки. В программе asp.net у меня более 20-ти секунд в виде сетки.

Есть ли альтернативы для установки значения по умолчанию для всех видов сетки одновременно?

Спасибо

Ответы [ 3 ]

2 голосов
/ 31 января 2012

Я бы предложил вам создать новую тему ASP.NET на основе существующих и изменить это свойство в файле скина.В этом случае вы получите требуемый результат для всего веб-сайта без изменения даже строки кода:)

1 голос
/ 02 августа 2011

Вы можете установить его в событии PageLoad кода ниже так:

[VB.NET]
Protected Sub Page_Load(sender As Object, e As EventArgs)
    For Each col As GridViewDataColumn In grid.Columns
        col.Settings.AutoFilterCondition = AutoFilterCondition.Contains
    Next
End Sub
0 голосов
/ 22 июля 2014

Я добился этого следующим образом:

  1. Добавлен следующий метод расширения для сокращения работы, он возвращает все элементы управления типа:

    public static IEnumerable<T> GetAllControlsOfType<T>(this Control parent) where T : Control
    {
        var result = new List<T>();
        foreach (Control control in parent.Controls)
        {
            if (control is T)
            {
                result.Add((T)control);
            }
            if (control.HasControls())
            {
                result.AddRange(control.GetAllControlsOfType<T>());
            }
        }
        return result;
    }
    
  2. Добавьте следующее на событие базовой страницы OnLoad (которое наследует от страницы, а все мои страницы наследуют), если вы не используете базовую страницу, я рекомендую ее, в противном случае вы можете добавить ее на каждую страницу.

       this.GetAllControlsOfType<ASPxGridView>()
        .SelectMany(gv => gv.Columns.OfType<GridViewDataTextColumn>())
        .ForEach(c => c.Settings.AutoFilterCondition = AutoFilterCondition.Contains);
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...