Example #1
0
        protected virtual void SelectDataGrid_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (!IsFine || e.Button != MouseButtons.Left || e.Clicks != 1 || Disposing || IsDisposed)
            {
                return;
            }
            object keyObject = KeyObject;

            try
            {
                this.block = true;

                DocsDataGridColumnHeaderCell currentHeaderCell = (DocsDataGridColumnHeaderCell)Columns[e.ColumnIndex].HeaderCell;

                switch (currentHeaderCell.SortOrder)
                {
                case 0:                         // стобец в сортировке не участвовал ранее
                    for (byte i = 0; i < Columns.Count; i++)
                    {
                        if (Columns[i].Visible &&
                            ((DocsDataGridColumnHeaderCell)Columns[i].HeaderCell).SortOrder < 6 &&
                            ((DocsDataGridColumnHeaderCell)Columns[i].HeaderCell).SortOrder > 0)
                        {
                            if (((DocsDataGridColumnHeaderCell)Columns[i].HeaderCell).SortOrder == 5)
                            {
                                ((DocsDataGridColumnHeaderCell)Columns[i].HeaderCell).SortOrder = 0;
                                Columns[i].HeaderCell.SortGlyphDirection = SortOrder.None;
                            }
                            else
                            {
                                ((DocsDataGridColumnHeaderCell)Columns[i].HeaderCell).SortOrder++;
                            }
                        }
                    }
                    currentHeaderCell.SortOrder          = 1;
                    currentHeaderCell.SortGlyphDirection = SortOrder.Descending;
                    break;

                case 1:                         // поменяем направление сортировки
                    currentHeaderCell.SortGlyphDirection = currentHeaderCell.SortGlyphDirection == SortOrder.Ascending
                                                                ? SortOrder.Descending
                                                                : SortOrder.Ascending;
                    break;

                default:                         // попали в столбец, который ранее был в очереди, но не первый
                    byte _sortOrder = currentHeaderCell.SortOrder;
                    for (byte i = 0; i < Columns.Count; i++)
                    {
                        if (Columns[i].Visible &&
                            ((DocsDataGridColumnHeaderCell)Columns[i].HeaderCell).SortOrder < _sortOrder &&
                            ((DocsDataGridColumnHeaderCell)Columns[i].HeaderCell).SortOrder > 0)
                        {
                            ((DocsDataGridColumnHeaderCell)Columns[i].HeaderCell).SortOrder++;
                        }
                    }

                    currentHeaderCell.SortOrder = 1;
                    break;
                }
                this.DataBindingComplete -= SelectDataGrid_DataBindingComplete;
                this.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(SelectDataGrid_DataBindingComplete);

                MakeSortOrder(true);
            }
            catch (Exception ex)
            {
                Data.Env.WriteToLog(ex);
            }
            finally
            {
                //if(this.DataBindings != null)
                //    this.GetDataView().EndInit();
                //if(keyObject == null)
                //{
                //    this.block = false;
                //    ClearSelection();
                //}
                //else
                //    SelectRow(keyObject);
                //this.block = false;

                if (VerticalScrollBar.Visible)
                {
                    VerticalScrollBar.Invalidate();
                }
                if (HorizontalScrollBar.Visible)
                {
                    HorizontalScrollBar.Invalidate();
                }
            }
        }