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(); } } }