private SortOrder ReverseSort(bool keepSamePriority, int sortPriority) { SortColDefn colDefn = _sortedColumns[sortPriority]; // The column is already being sorted. SortOrder sortOrder; if (sortPriority == 0 || keepSamePriority) { // There is no need to change where it is in the list. colDefn.ascending = !colDefn.ascending; _sortedColumns[sortPriority] = colDefn; sortOrder = colDefn.ascending ? SortOrder.Ascending : SortOrder.Descending; if (sortPriority != 0) { return(sortOrder); // Reverse only, do not set the glyph. } } else { // Promote this column to be the first. for (int loop = sortPriority; loop > 0; --loop) { _sortedColumns[loop] = _sortedColumns[loop - 1]; } // Promoted columns are always sorted ascending. colDefn.ascending = true; _sortedColumns[0] = colDefn; sortOrder = SortOrder.Ascending; } _grid.Columns[colDefn.colNum].HeaderCell.SortGlyphDirection = sortOrder; return(sortOrder); }
public SortOrder SetSortColumn(int columnIndex, Keys ModifierKeys) { bool keepSamePriority = ((ModifierKeys & Keys.Control) == Keys.Control); SortColDefn colDefn; int colunaOrdenacao = 0; colunaOrdenacao = MapearOrdenacaoColuna(columnIndex); if (_sortedColumns.Count > 0 && !keepSamePriority) { // Erase the current sort glyph. colDefn = _sortedColumns[0]; _grid.Columns[colDefn.colNum].HeaderCell.SortGlyphDirection = SortOrder.None; } int sortPriority = _sortedColumns.FindIndex( delegate(SortColDefn cd) { return(cd.colNum == colunaOrdenacao); }); if (sortPriority != -1) { return(ReverseSort(keepSamePriority, sortPriority)); } // Column not found in list. // This column is not being sorted at present. // If got to limit of num sorted columns, remove the current last one. if (_maxSortColumns > 0 && _sortedColumns.Count == _sortedColumns.Capacity) { _sortedColumns.RemoveAt(_sortedColumns.Count - 1); } colDefn = new SortColDefn(colunaOrdenacao, SortOrder.Ascending); if (keepSamePriority) { _sortedColumns.Add(colDefn); if (_sortedColumns.Count > 1) { return(SortOrder.Ascending); // Do not set the glyph. } } else { _sortedColumns.Insert(0, colDefn); } colDefn.colNum = short.Parse(columnIndex.ToString()); _grid.Columns[colDefn.colNum].HeaderCell.SortGlyphDirection = SortOrder.Ascending; _sortedColumns[0].colNum = colDefn.colNum; return(SortOrder.Ascending); }
public SortOrder SetSortColumn(int columnIndex, Keys ModifierKeys) { bool keepSamePriority = ((ModifierKeys & Keys.Control) == Keys.Control); SortColDefn colDefn = new SortColDefn(); colDefn = MapearOrdenacaoColuna(columnIndex); if (_sortedColumns.Count > 0 && !keepSamePriority) { // Erase the current sort glyph. _grid.Columns[_sortedColumns[0].colOriginal].HeaderCell.SortGlyphDirection = SortOrder.None; } int sortPriority = _sortedColumns.FindIndex( delegate(SortColDefn cd) { return(cd.colNum == colDefn.colNum); }); if (sortPriority != -1) { return(ReverseSort(colDefn, keepSamePriority, sortPriority)); } if (keepSamePriority) { _sortedColumns.Add(colDefn); if (_sortedColumns.Count > 1) { return(SortOrder.Ascending); // Do not set the glyph. } } else { _sortedColumns.Insert(0, colDefn); } colDefn.colNum = short.Parse(columnIndex.ToString()); _grid.Columns[colDefn.colOriginal].HeaderCell.SortGlyphDirection = SortOrder.Ascending; return(SortOrder.Ascending); }
public SortOrder SetSortColumn(int columnIndex, Keys ModifierKeys) { bool keepSamePriority = ((ModifierKeys & Keys.Control) == Keys.Control); SortColDefn colDefn; if (_sortedColumns.Count > 0 && !keepSamePriority) { // Erase the current sort glyph. colDefn = _sortedColumns[0]; _grid.Columns[colDefn.colNum].HeaderCell.SortGlyphDirection = SortOrder.None; } int sortPriority = _sortedColumns.FindIndex( delegate(SortColDefn cd) { return cd.colNum == columnIndex; }); if (sortPriority != -1) return ReverseSort(keepSamePriority, sortPriority); // Column not found in list. // This column is not being sorted at present. // If got to limit of num sorted columns, remove the current last one. if (_maxSortColumns > 0 && _sortedColumns.Count == _sortedColumns.Capacity) _sortedColumns.RemoveAt(_sortedColumns.Count - 1); colDefn = new SortColDefn(columnIndex, SortOrder.Ascending); if (keepSamePriority) { _sortedColumns.Add(colDefn); if (_sortedColumns.Count > 1) return SortOrder.Ascending; // Do not set the glyph. } else _sortedColumns.Insert(0, colDefn); _grid.Columns[colDefn.colNum].HeaderCell.SortGlyphDirection = SortOrder.Ascending; return SortOrder.Ascending; }
protected override void OnColumnHeaderMouseClick(DataGridViewCellMouseEventArgs e) { //Si no tiene datos asociados salgo. if (mo_dvDataView == null) return; //Agrego a la lista de columnas para el ordenamiento SortColDefn wSortColDefn = new SortColDefn(Columns[e.ColumnIndex].DataPropertyName, this.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection); //Busco la columna en la coleccion int windex = _sortedColumns.FindIndex(delegate(SortColDefn auxSortColDefn) { return auxSortColDefn.colName == wSortColDefn.colName; }); //Verifico que no exista en la lista de columnas a ordenar if (windex != -1) { //Objeto columna Auxiliar SortColDefn wo_SortColDefn; //Obtengo el objeto de la posicion i. wo_SortColDefn = _sortedColumns[windex]; _sortedColumns.Remove(wSortColDefn); //Seteo el tipo de orden if (wSortColDefn.ascending) { wo_SortColDefn.ascending = false; this.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Descending; } else { wo_SortColDefn.ascending = true; this.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Ascending; } //Elimino el que estaba en la lista de columnas _sortedColumns.Remove(wo_SortColDefn); //Inserto en la posicion que tenía un nuevo item con el ordenamiento solicitado _sortedColumns.Insert(windex, wo_SortColDefn); } else { //Seteo el tipo de orden if (wSortColDefn.ascending) { wSortColDefn.ascending = false; //this.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = // System.Windows.Forms.SortOrder.Descending; } else { wSortColDefn.ascending = true; //this.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = // System.Windows.Forms.SortOrder.Ascending; } //Agrego la columna a la lista _sortedColumns.Add(wSortColDefn); } Columns[e.ColumnIndex].SortMode = DataGridViewColumnSortMode.Programmatic; msz_Sort = string.Empty; //Recorro la coleccion de columnas a ordenar foreach (SortColDefn wColDefn in _sortedColumns) { msz_Sort = msz_Sort + wColDefn.colName; if (wColDefn.ascending) { msz_Sort = msz_Sort + " ASC,"; } else { msz_Sort = msz_Sort + " DESC,"; } } msz_Sort = msz_Sort.Substring(0, msz_Sort.Length - 1); mo_dvDataView.Sort = msz_Sort; this.DataSource = mo_dvDataView; base.OnColumnHeaderMouseClick(e); }
protected override void OnColumnHeaderMouseClick(DataGridViewCellMouseEventArgs e) { //Si no tiene datos asociados salgo. if (mo_dvDataView == null) { return; } //Agrego a la lista de columnas para el ordenamiento SortColDefn wSortColDefn = new SortColDefn(Columns[e.ColumnIndex].DataPropertyName, this.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection); //Busco la columna en la coleccion int windex = _sortedColumns.FindIndex(delegate(SortColDefn auxSortColDefn) { return(auxSortColDefn.colName == wSortColDefn.colName); }); //Verifico que no exista en la lista de columnas a ordenar if (windex != -1) { //Objeto columna Auxiliar SortColDefn wo_SortColDefn; //Obtengo el objeto de la posicion i. wo_SortColDefn = _sortedColumns[windex]; _sortedColumns.Remove(wSortColDefn); //Seteo el tipo de orden if (wSortColDefn.ascending) { wo_SortColDefn.ascending = false; this.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Descending; } else { wo_SortColDefn.ascending = true; this.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Ascending; } //Elimino el que estaba en la lista de columnas _sortedColumns.Remove(wo_SortColDefn); //Inserto en la posicion que tenía un nuevo item con el ordenamiento solicitado _sortedColumns.Insert(windex, wo_SortColDefn); } else { //Seteo el tipo de orden if (wSortColDefn.ascending) { wSortColDefn.ascending = false; //this.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = // System.Windows.Forms.SortOrder.Descending; } else { wSortColDefn.ascending = true; //this.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = // System.Windows.Forms.SortOrder.Ascending; } //Agrego la columna a la lista _sortedColumns.Add(wSortColDefn); } Columns[e.ColumnIndex].SortMode = DataGridViewColumnSortMode.Programmatic; msz_Sort = string.Empty; //Recorro la coleccion de columnas a ordenar foreach (SortColDefn wColDefn in _sortedColumns) { msz_Sort = msz_Sort + wColDefn.colName; if (wColDefn.ascending) { msz_Sort = msz_Sort + " ASC,"; } else { msz_Sort = msz_Sort + " DESC,"; } } msz_Sort = msz_Sort.Substring(0, msz_Sort.Length - 1); mo_dvDataView.Sort = msz_Sort; this.DataSource = mo_dvDataView; base.OnColumnHeaderMouseClick(e); }