Mini Kabibi Habibi

Current Path : C:/Users/Public/Documents/DXperience 13.1 Demos/WinForms/CS/GridMainDemo/Modules/
Upload File :
Current File : C:/Users/Public/Documents/DXperience 13.1 Demos/WinForms/CS/GridMainDemo/Modules/GroupInterval.cs

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.Utils.Menu;
using DevExpress.XtraGrid.Menu;
using DevExpress.XtraGrid.Localization;
using DevExpress.Utils;
using DevExpress.DXperience.Demos;

namespace DevExpress.XtraGrid.Demos {
    /// <summary>
    /// Summary description for GroupInterval.
    /// </summary>
    public partial class GroupInterval : TutorialControl {
        public GroupInterval() {
            // This call is required by the Windows.Forms Form Designer.
            InitializeComponent();
            TutorialInfo.WhatsThisCodeFile = "CS\\GridMainDemo\\Modules\\GroupInterval.cs";
            TutorialInfo.WhatsThisXMLFile = "DevExpress.XtraGrid.Demos.CodeInfo.GroupInterval.xml";

            // TODO: Add any initialization after the InitForm call

        }
        public override BaseView ExportView { get { return gridView1; } }
        private void GroupInterval_Load(object sender, System.EventArgs e) {
            gridControl1.DataSource = GroupIntervalData.CreateDataTable(350);
            InitDrawMode();
            icbeDrawMode.EditValue = gridView1.OptionsView.GroupDrawMode;
            icbeAllowFixedGroups.EditValue = gridView1.OptionsBehavior.AllowFixedGroups;
            cbeInterval.SelectedIndex = 0;
            gridView1.ExpandGroupRow(-1);
            gridView1.TopRowIndex = 2;
        }

        void InitDrawMode() {
            foreach(GroupDrawMode mode in Enum.GetValues(typeof(GroupDrawMode)))
                icbeDrawMode.Properties.Items.Add(new ImageComboBoxItem(EnumTitlesKeeper<GroupDrawMode>.GetTitle(mode), mode, -1));
            foreach(DefaultBoolean mode in Enum.GetValues(typeof(DefaultBoolean)))
                icbeAllowFixedGroups.Properties.Items.Add(new ImageComboBoxItem(EnumTitlesKeeper<DefaultBoolean>.GetTitle(mode), mode, -1));
        }

        //<icbeDrawMode>
        private void icbeDrawMode_SelectedIndexChanged(object sender, System.EventArgs e) {
            gridView1.OptionsView.GroupDrawMode = (GroupDrawMode)icbeDrawMode.EditValue;
        }
        //</icbeDrawMode>

        //<icbeAllowFixedGroups>
        private void icbeAllowFixedGroups_SelectedIndexChanged(object sender, EventArgs e) {
            gridView1.OptionsBehavior.AllowFixedGroups = (DefaultBoolean)icbeAllowFixedGroups.EditValue;
        }
        //</icbeAllowFixedGroups>

        //<cbeInterval>
        private void cbeInterval_SelectedIndexChanged(object sender, System.EventArgs e) {
            if(cbeInterval.EditValue.ToString().IndexOf("----") >= 0)
                cbeInterval.SelectedIndex = cbeInterval.Properties.Items.Count - 1;
            else SetGroupInterval(cbeInterval.SelectedIndex);
        }

        void SetInterval(GridColumn column, ColumnGroupInterval interval) {
            column.GroupInterval = interval;
            column.GroupIndex = 0;
        }

        void SetSortMode(GridColumn column, ColumnSortMode sortMode) {
            column.SortMode = sortMode;
            column.GroupIndex = 0;
        }

        void SetGroupInterval(int index) {
            gridView1.BeginSort();
            try {
                gridView1.ClearGrouping();
                foreach(GridColumn column in gridView1.Columns) {
                    column.GroupInterval = ColumnGroupInterval.Default;
                    column.SortMode = ColumnSortMode.Default;
                }
                switch(index) {
                    case 0:
                        SetInterval(gridColumn1, ColumnGroupInterval.Alphabetical);
                        gridColumn2.GroupInterval = ColumnGroupInterval.Alphabetical;
                        break;
                    case 1:
                        SetInterval(gridColumn5, ColumnGroupInterval.DateMonth);
                        break;
                    case 2:
                        SetInterval(gridColumn5, ColumnGroupInterval.DateYear);
                        break;
                    case 3:
                        SetInterval(gridColumn5, ColumnGroupInterval.DateRange);
                        break;
                    case 4:
                        SetSortMode(gridColumn4, ColumnSortMode.Custom);
                        break;
                    default:
                        SetInterval(gridColumn2, ColumnGroupInterval.Value);
                        break;
                }
            }
            finally {
                gridView1.EndSort();
                gridView1.CollapseAllGroups();
            }
        }

        private void gridView1_CustomColumnGroup(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnSortEventArgs e) {
            double x = Math.Floor(Convert.ToDouble(e.Value1) / 100);
            double y = Math.Floor(Convert.ToDouble(e.Value2) / 100);
            int res = Comparer.Default.Compare(x, y);
            if(x > 14 && y > 14) res = 0;
            e.Result = res;
            e.Handled = true;
        }
        //</cbeInterval>

        string IntervalByValue(object val) {
            double d = Math.Floor(Convert.ToDouble(val) / 100);
            string ret = string.Format("{0:c} - {1:c} ", d * 100, (d + 1) * 100);
            if(d > 14) ret = string.Format(">= {0:c} ", d * 100);
            return ret;
        }

        private void gridView1_CustomDrawGroupRow(object sender, DevExpress.XtraGrid.Views.Base.RowObjectCustomDrawEventArgs e) {
            GridGroupRowInfo info = e.Info as GridGroupRowInfo;
            if(info == null) return;
            if(info.Column.SortMode != ColumnSortMode.Custom) return;
            string interval = IntervalByValue(gridView1.GetGroupRowValue(info.RowHandle));
            string sumText = gridView1.GetGroupSummaryText(info.RowHandle);
            info.GroupText = string.Format("{2}: {0}{1}", interval, sumText, Properties.Resources.OrderSum);
        }

        private void gridView1_CellMerge(object sender, DevExpress.XtraGrid.Views.Grid.CellMergeEventArgs e) {
            if(e.Column.FieldName == "Order Date") {
                GridView view = sender as GridView;
                object val1 = view.GetRowCellValue(e.RowHandle1, e.Column);
                object val2 = view.GetRowCellValue(e.RowHandle2, e.Column);
                DateTime dt1 = val1 != DBNull.Value ? Convert.ToDateTime(val1) : DateTime.MinValue;
                DateTime dt2 = val2 != DBNull.Value ? Convert.ToDateTime(val2) : DateTime.MinValue;
                e.Merge = dt1.Date == dt2.Date;
                e.Handled = true;
            }
        }

        private void gridView1_GridMenuItemClick(object sender, GridMenuItemClickEventArgs e) {
            if(e.MenuType != GridMenuType.Column) return;
            if(gridView1.GroupCount != 1) return;
            switch(e.SummaryFormat) {
                case "DateMonth": cbeInterval.SelectedIndex = 1; break;
                case "DateYear": cbeInterval.SelectedIndex = 2; break;
                case "DateRange": cbeInterval.SelectedIndex = 3; break;
            }
        }
        DXSubMenuItem GetDateIntervalMenu(GridViewMenu columnMenu) {
            foreach(DXMenuItem item in columnMenu.Items)
                if(item.Caption == GridLocalizer.Active.GetLocalizedString(GridStringId.MenuColumnGroupIntervalMenu))
                    return item as DXSubMenuItem;
            return null;
        }
        private void gridView1_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e) {
            if(e.MenuType != GridMenuType.Column) return;
            DXSubMenuItem menu = GetDateIntervalMenu(e.Menu);
            if(menu == null) return;
            for(int i = menu.Items.Count - 1; i >= 0; i--)
                if(menu.Items[i].Caption == GridLocalizer.Active.GetLocalizedString(GridStringId.MenuColumnGroupIntervalNone) ||
                    menu.Items[i].Caption == GridLocalizer.Active.GetLocalizedString(GridStringId.MenuColumnGroupIntervalDay))
                    menu.Items.RemoveAt(i);
        }
    }
}