コード例 #1
0
        /// <summary>
        /// Перезаполнение главного DataGrid страницы с учётом фильтров
        /// </summary>
        public static void PageDataGrid_RefillingWithFilters(DataGrid dataGrid, FilterCriterias filterCriterias,
                                                             Predicate <object> predicate)
        {
            var pageGridCollectionView = CollectionViewSource.GetDefaultView(dataGrid.ItemsSource);

            pageGridCollectionView.Filter = filterCriterias.IsEmpty ? null : predicate;
            dataGrid.ItemsSource          = pageGridCollectionView;
            pageGridCollectionView.Refresh();
        }
コード例 #2
0
        /// <summary>
        /// Сервисный метод фильтрующего главного DataGrid страницы - применения фильтра.
        /// </summary>
        public static void Service_PageDataGridPopupFilterConfirm(object senderIsButtonOrTextBox,
                                                                  FilterCriterias filterCriterias)
        {
            var popupControl = senderIsButtonOrTextBox as Control;             // Control вызвавший событие (TextBox или Button)

            if (popupControl == null)
            {
                return;
            }
            var grid = popupControl.Parent as Grid;                            // Grid-обёртка полей контекстного меню

            if (grid == null)
            {
                return;
            }
            var menuItem = grid.Parent as MenuItem;                            // MenuItem контекстного меню

            if (menuItem == null)
            {
                return;
            }
            var contextMenu = menuItem.Parent as ContextMenu;                  // Контекстное меню DataGrid

            if (contextMenu == null)
            {
                return;
            }
            var textBlocks = grid.Children.OfType <TextBlock>().ToArray();
            var textBoxes  = grid.Children.OfType <TextBox>().ToArray();

            if (textBlocks.Length != 1 || textBoxes.Length != 1)
            {
                return;
            }
            var popupFilterName     = textBlocks[0];                    // Контрол для надписи
            var popupFilterValue    = textBoxes[0];                     // Поле ввода
            var columnName          = (string)popupFilterValue.Tag;     // Получения столбца из свойства Tag поля ввода
            var columnDysplayedName = popupFilterName.Text;             // Получение отображаемого имени столбца из надписи
            var filterValue         = popupFilterValue.Text.Trim();     // Получение значения фильтра

            if (string.IsNullOrWhiteSpace(filterValue))
            {
                return;
            }

            // Добавление/обновления критерия фильтрации и скрытие контекстного меню
            filterCriterias.UpdateCriteria(columnName, filterValue, columnDysplayedName);
            contextMenu.Visibility = Visibility.Collapsed;
        }
コード例 #3
0
        /// <summary>
        /// Перезаполнение фильтрующего DataGrid и скрытие/отображение соответствующих панелей,
        /// в зависимости от критериев фильтра.
        /// </summary>
        /// <param name="filtersTable">DataGrid отображения фильтра</param>
        /// <param name="filterCriterias">Критерии фильтрации страницы</param>
        /// <param name="filterDataPanel">Панель содержащая DataGrid отображения фильтра и кнопку удаления</param>
        /// <param name="filterCoverPanel">Панель-заглушка для пользователя с сообщением</param>
        public static void RefillingFilterTableAndShowHidePanel(DataGrid filtersTable,
                                                                FilterCriterias filterCriterias, Panel filterDataPanel, Panel filterCoverPanel)
        {
            const Visibility show = Visibility.Visible;
            const Visibility hide = Visibility.Collapsed;

            // В зависимости от наличия критериев фильтрации, скрываем/отображаем соответсвующие панели
            filterDataPanel.Visibility  = filterCriterias.IsEmpty ? hide : show;
            filterCoverPanel.Visibility = filterCriterias.IsEmpty ? show : hide;

            // Перезаполняем DataGrid отображения фильтра
            filtersTable.ItemsSource = filterCriterias.DisplayedDictionary;
            var view = CollectionViewSource.GetDefaultView(filtersTable.ItemsSource);

            view.Refresh();
        }