Вопрос

Включить фильтр в TreeGride

Добрый день. Объясните почему не отрабатывает фильтр в DataTreeGrid? Фильтр IsNull, включаю, а ничего не происходит, читал, что необходимо привести сначала к списку, но и так ничего не срабатывает. Вот мой код:

        var ParentDataFieldName = grdData.ParentDataFieldName;
                var SelectQuery = dlData.Dataset.SelectQuery;
        if (ParentDataFieldName == 'ParentID') {
            grdData.ParentDataFieldName = 'ID';
                EnableDatasetFilters(dlData.Dataset,true,'ContractID');
                RefreshDataset(dlData.Dataset);

Нравится

12 комментариев

И это вообще реально?)

Реально.
Вот статья где применялся подобный прием.

Так почему то не работает.. Фильтр вообще не включается..

1. Давайте для начала версию уточним.

2.Посмотрите какой запрос идет либо с помощью Connector.DBEngine.GetSelectQuerySQLText(SelectQuery) либо с помощью профайлера.

3. Попробуйте включить любой другой фильтр на котором будет просто тестировать результат.

Версия 3.3.1. Я включал фильтр из под админа, но результат тот же, все записи отображаются, хотя те, что должны были отфильтроваться считаются отфильтрованными, но все равно в списке присутствуют. Определил что отфильтрованные так - при нажатии на "Изменить" выскакивает сообщение что запись удалена..

Если обновить реестр кнопочкой - они не пропадают ?

Нет.. Похоже у этой компоненты с фильтрами дружбы не складывается..)

Николай, возможно, это происходит по следующей причине: Вы устанавливаете grdData.ParentDataFieldName = 'ID', но назад в grdData.ParentDataFieldName = 'ParentID' не возвращаете. Следовательно, когда Вы ожидаете, что сработает фильтр, он не может сработать, так как не выполняется условие

if (ParentDataFieldName == 'ParentID')

Попробуйте, сработает ли следующий код:

        var ParentDataFieldName = grdData.ParentDataFieldName;
        var Dataset = dlData.Dataset;
        Dataset.DisableEvents();
	if (ParentDataFieldName == 'ParentID') {
		grdData.ParentDataFieldName = 'ID';
		Dataset.Close();
		EnableDatasetFilters(Dataset, true, 'ContractID');
		grdData.ParentDataFieldName = 'ParentID';
		Dataset.Open();
	}
        Dataset.EnableEvents();

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

В статье Громового, ссылку на которую я давал выше так и написано :) Я не заметил, а Олегу +1 за внимательность :smile:

Спасибо, буду пробовать! А что означает

Dataset.DisableEvents();
Dataset.EnableEvents();

Данные методы отключают и включают обработку событий датасета. Используются, когда при выполнении некоторых действий над датасетом не нужно, чтобы срабатывали обработчики его событий. Например, если в событии OnBeforeOpen датасета Вам необходимо открыть другой экземпляр этого же датасета, то без Dataset.DisableEvents() возникнет зацикливание.

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Спасибо за объяснения.

Показать все комментарии