Mini Kabibi Habibi

Current Path : C:/Users/Public/Documents/DXperience 13.1 Demos/WPF/CS/GridDemo.Wpf/Modules/
Upload File :
Current File : C:/Users/Public/Documents/DXperience 13.1 Demos/WPF/CS/GridDemo.Wpf/Modules/MultiSelection.xaml.cs

using System.Linq;
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Data;
using DevExpress.Data;
using DevExpress.Xpf.DemoBase;
using DevExpress.Xpf.Grid;
using DevExpress.Xpf.Bars;
using System.Collections;
using System.Data;

namespace GridDemo {
    [CodeFile("Controls/MiltiSelectionOptionsControl.xaml.(cs)")]
    [CodeFile("Controls/MiltiSelectionOptionsControl(.SL).xaml")]
    [CodeFile("ModuleResources/MultiSelectionClasses.(cs)")]
    [CodeFile("ModuleResources/MultiSelectionTemplates(.SL).xaml")]
    public partial class MultiSelection : GridDemoModule {
        GridViewBase View { get { return (GridViewBase)grid.View; } }
        public MultiSelection() {
            InitializeComponent();
            viewsListBox.EditValueChanged += new DevExpress.Xpf.Editors.EditValueChangedEventHandler(viewsListBox_SelectionChanged);
            View.ShowGridMenu += new GridMenuEventHandler(View_ShowGridMenu);
            FillComboBoxes();
            ProductsMultiSelectionOptionsControl.SelectButtonClick += new EventHandler(SelectProductsButtonClick);
            ProductsMultiSelectionOptionsControl.UnselectButtonClick += new EventHandler(UnselectProductsButtonClick);
            ProductsMultiSelectionOptionsControl.ReselectButtonClick += new EventHandler(ReselectProductsButtonClick);
            PriceMultiSelectionOptionsControl.SelectButtonClick += new EventHandler(SelectPriceButtonClick);
            PriceMultiSelectionOptionsControl.UnselectButtonClick += new EventHandler(UnselectPriceButtonClick);
            PriceMultiSelectionOptionsControl.ReselectButtonClick += new EventHandler(ReselectPriceButtonClick);
        }

        void View_ShowGridMenu(object sender, GridMenuEventArgs e) {
            if(e.MenuType == GridMenuType.Column) {
                e.Customizations.Add(new RemoveBarItemAndLinkAction() { ItemName = DefaultColumnMenuItemNames.SortBySummary });
            }
        }
        void viewsListBox_SelectionChanged(object sender, DevExpress.Xpf.Editors.EditValueChangedEventArgs e) {
            grid.View = (GridViewBase)FindResource(viewsListBox.SelectedIndex == 0 ? "tableView" : "cardView");
        }

        DataTable dataTableFromGrid = null;
        DataTable DataTableFromGrid {
            get {
                if(dataTableFromGrid == null) {
                    dataTableFromGrid = ((DataView)grid.ItemsSource).Table;
                }
                return dataTableFromGrid;
            }
        }
        private void FillComboBoxes() {
            List<Range> listRanges = new List<Range>();
            const int lastRangeMinLimit = 240;
            const int rangeInList = 30;
            for(int i = 0; i <= lastRangeMinLimit; i += rangeInList) {
                listRanges.Add(new Range() { Text = ("$" + Convert.ToString(i) + " - $" + Convert.ToString(i + rangeInList)), Min = i, Max = (i + rangeInList) });
            }
            PriceMultiSelectionOptionsControl.ComboBox.ItemsSource = listRanges;
            PriceMultiSelectionOptionsControl.ComboBox.SelectedIndex = 0;
            ProductsMultiSelectionOptionsControl.ComboBox.SelectedIndex = 0;
        }
        void RunAction(RowFilter FilterDelegate, Action actionForRows) {
            try {
                grid.BeginSelection();
                ICollection rows = DataTableFromGrid.Rows;
                foreach(DataRow row in rows) {
                    if(FilterDelegate(row))
                        actionForRows(grid.GetRowHandleByListIndex(DataTableFromGrid.Rows.IndexOf(row)));
                }
            } finally {
                grid.EndSelection();
            }
        }
        delegate bool RowFilter(DataRow row);
        bool SelectProductsFilter(DataRow row) {
            return object.Equals((row["ProductID"]), (int)ProductsMultiSelectionOptionsControl.ComboBox.EditValue);
        }
        bool SelectRangeFilter(DataRow row) {
            Range range = (Range)PriceMultiSelectionOptionsControl.ComboBox.SelectedItem;
            return (((Convert.ToInt32(row["UnitPrice"]) >= range.Min) && (Convert.ToInt32(row["UnitPrice"]) <= range.Max)));
        }
        delegate void Action(int rowHandle);
        void SelectAction(int rowHandle) {
            grid.SelectItem(rowHandle);
        }
        void UnselectAction(int rowHandle) {
            grid.UnselectItem(rowHandle);
        }
        private void SelectProductsButtonClick(object sender, EventArgs e) {
            RunAction(SelectProductsFilter, SelectAction);
        }
        private void UnselectProductsButtonClick(object sender, EventArgs e) {
            RunAction(SelectProductsFilter, UnselectAction);
        }
        private void ReselectProductsButtonClick(object sender, EventArgs e) {
            grid.UnselectAll();
            RunAction(SelectProductsFilter, SelectAction);
        }
        private void SelectPriceButtonClick(object sender, EventArgs e) {
            RunAction(SelectRangeFilter, SelectAction);
        }
        private void UnselectPriceButtonClick(object sender, EventArgs e) {
            RunAction(SelectRangeFilter, UnselectAction);
        }
        private void ReselectPriceButtonClick(object sender, EventArgs e) {
            grid.UnselectAll();
            RunAction(SelectRangeFilter, SelectAction);
        }
        decimal sum = 0;
        private void grid_CustomSummary(object sender, DevExpress.Data.CustomSummaryEventArgs e) {
            if(object.Equals(e.SummaryProcess, CustomSummaryProcess.Start)) {
                sum = 0;
            }
            if(e.SummaryProcess == CustomSummaryProcess.Calculate) {
                if((grid != null) && (grid.View != null)) {
                    if(grid.View.IsRowSelected(e.RowHandle)) {
                        sum += (decimal)e.FieldValue;
                    }
                }
            }
            if(e.SummaryProcess == CustomSummaryProcess.Finalize)
                e.TotalValue = sum;
        }
        void UpdateSummary() {
            if(grid != null) {
                grid.UpdateTotalSummary();
                grid.UpdateGroupSummary();
            }
        }
        private void gridView_SelectionChanged(object sender, GridSelectionChangedEventArgs e) {
            UpdateSummary();
        }
        private void EnableMultiSelectCheckEditChecked(object sender, RoutedEventArgs e) {
            SetMultiSelectMode(true);
        }
        private void EnableMultiSelectCheckEditUnchecked(object sender, RoutedEventArgs e) {
            SetMultiSelectMode(false);
        }
        void SetMultiSelectMode(bool enabled) {
            grid.SelectionMode = enabled ? MultiSelectMode.Row : MultiSelectMode.None;
            ProductsMultiSelectionOptionsControl.IsEnabled = enabled;
            PriceMultiSelectionOptionsControl.IsEnabled = enabled;
        }

        private void grid_CurrentItemChanged(object sender, CurrentItemChangedEventArgs e) {
            if((enableMultiSelectCheckEdit != null) && ((bool)enableMultiSelectCheckEdit.IsChecked))
                UpdateSummary();
        }
    }
}