/// <summary> /// Sort the current column /// </summary> /// <param name="e"></param> /// <param name="p_bAscending"></param> /// <param name="p_Comparer"></param> public void SortColumn(PositionEventArgs e, bool p_bAscending, System.Collections.IComparer p_Comparer) { //verifico che il sort sia abilitato e che ci sia almeno una riga da ordinare oltra a quella corrente if (IsSortEnable(e) && e.Position.Row < (e.Grid.RowsCount) && e.Grid.ColumnsCount > 0) { Range l_RangeToSort; Range l_RangeHeader; if (m_RangeToSort != null) { l_RangeToSort = m_RangeToSort.GetRange(e.Grid); } else { //the range to sort is all the grid range without the rows < of the current row l_RangeToSort = new Range(e.Position.Row + 1, 0, e.Grid.RowsCount - 1, e.Grid.ColumnsCount - 1); } if (m_HeaderRange != null) { l_RangeHeader = m_HeaderRange.GetRange(e.Grid); } else { //the range header is all the grid range with the rows <= of the current row l_RangeHeader = new Range(0, 0, e.Position.Row, e.Grid.ColumnsCount - 1); } ICellSortableHeader l_CellSortable = (ICellSortableHeader)e.Cell; if (e.Grid.RowsCount > (e.Position.Row + 1) && e.Grid.ColumnsCount > e.Grid.FixedColumns) { e.Grid.SortRangeRows(l_RangeToSort, e.Position.Column, p_bAscending, p_Comparer); if (p_bAscending) { l_CellSortable.SetSortMode(e.Position, GridSortMode.Ascending); } else { l_CellSortable.SetSortMode(e.Position, GridSortMode.Descending); } //Remove the image from others ColHeaderSort for (int r = l_RangeHeader.Start.Row; r <= l_RangeHeader.End.Row; r++) { for (int c = l_RangeHeader.Start.Column; c <= l_RangeHeader.End.Column; c++) { Cells.ICellVirtual l_tmp = e.Grid.GetCell(r, c); if (l_tmp != l_CellSortable && l_tmp != null && l_tmp is ICellSortableHeader) { ((ICellSortableHeader)l_tmp).SetSortMode(new Position(r, c), GridSortMode.None); } } } } } }
/// <summary> /// Sort the current column /// </summary> /// <param name="e">The <see cref="Fr.Medit.MedDataGrid.PositionEventArgs"/> instance containing the event data.</param> /// <param name="doAscending">if set to <c>true</c> sort in ascending order.</param> /// <param name="comparer">The comparer.</param> private void SortColumn(PositionEventArgs e, bool doAscending, IComparer comparer) { if (IsSortEnable(e) && e.Position.Row < e.Grid.RowsCount && e.Grid.ColumnsCount > 0) { Range l_RangeToSort; Range l_RangeHeader; if (rangeToSort != null) { l_RangeToSort = rangeToSort.GetRange(e.Grid); } else { // the range to sort is all the grid range without the rows < of the current row l_RangeToSort = new Range(e.Position.Row + 1, 0, e.Grid.RowsCount - 1, e.Grid.ColumnsCount - 1); } if (headerRange != null) { l_RangeHeader = headerRange.GetRange(e.Grid); } else { // the range header is all the grid range with the rows <= of the current row l_RangeHeader = new Range(0, 0, e.Position.Row, e.Grid.ColumnsCount - 1); } if (e.Grid.RowsCount > e.Grid.FixedRows && e.Grid.ColumnsCount > e.Grid.FixedColumns) { e.Grid.SortRangeRows(l_RangeToSort, e.Position.Column, doAscending, comparer); ICellSortableHeader l_CellSortable = (ICellSortableHeader)e.Cell; l_CellSortable.SetSortMode(e.Position, doAscending == true ? GridSortMode.Ascending : GridSortMode.Descending); // Remove the image from others for (int r = l_RangeHeader.Start.Row; r <= l_RangeHeader.End.Row; r++) { for (int c = l_RangeHeader.Start.Column; c <= l_RangeHeader.End.Column; c++) { Cells.ICellVirtual l_tmp = e.Grid.GetCell(r, c); if (l_tmp != null && l_tmp is ICellSortableHeader && c != e.Position.Column) { ((ICellSortableHeader)l_tmp).SetSortMode(new Position(r, c), GridSortMode.None); } } } } } }
/// <summary> /// Sort the current column. If the range contains all the columns this method move directly the row object otherwise move each cell. /// </summary> /// <param name="sender"></param> /// <param name="p_bAscending"></param> /// <param name="p_Comparer"></param> public void SortColumn(CellContext sender, bool p_bAscending, System.Collections.IComparer p_Comparer) { //verifico che il sort sia abilitato e che ci sia almeno una riga da ordinare oltra a quella corrente if (IsSortEnable(sender) && sender.Position.Row < (sender.Grid.Rows.Count) && sender.Grid.Columns.Count > 0) { Range l_RangeToSort; Range l_RangeHeader; if (m_RangeToSort != null) { l_RangeToSort = m_RangeToSort.GetRange(sender.Grid); } else { //the range to sort is all the grid range without the rows < of the current row l_RangeToSort = new Range(sender.Position.Row + 1, 0, sender.Grid.Rows.Count - 1, sender.Grid.Columns.Count - 1); } if (m_HeaderRange != null) { l_RangeHeader = m_HeaderRange.GetRange(sender.Grid); } else { //the range header is all the grid range with the rows <= of the current row l_RangeHeader = new Range(0, 0, sender.Position.Row, sender.Grid.Columns.Count - 1); } Models.ISortableHeader modelSortable = (Models.ISortableHeader)sender.Cell.Model.FindModel(typeof(Models.ISortableHeader)); if (sender.Grid.Rows.Count > (sender.Position.Row + 1) && sender.Grid.Columns.Count > sender.Grid.FixedColumns) { //Sort sender.Grid.SortRangeRows(l_RangeToSort, sender.Position.Column, p_bAscending, p_Comparer); if (p_bAscending) { modelSortable.SetSortMode(sender, DevAge.Drawing.HeaderSortStyle.Ascending); } else { modelSortable.SetSortMode(sender, DevAge.Drawing.HeaderSortStyle.Descending); } //Remove the image from others ColHeaderSort for (int r = l_RangeHeader.Start.Row; r <= l_RangeHeader.End.Row; r++) { for (int c = l_RangeHeader.Start.Column; c <= l_RangeHeader.End.Column; c++) { Cells.ICellVirtual tmpCell = sender.Grid.GetCell(r, c); if (tmpCell != sender.Cell && tmpCell != null && tmpCell.Model.FindModel(typeof(Models.ISortableHeader)) != null) { Models.ISortableHeader header = (Models.ISortableHeader)tmpCell.Model.FindModel(typeof(Models.ISortableHeader)); header.SetSortMode(new CellContext(sender.Grid, new Position(r, c), tmpCell), DevAge.Drawing.HeaderSortStyle.None); } } } sender.Grid.InvalidateRange(l_RangeHeader); } } }
/// <summary> /// Sort a range of the grid /// </summary> /// <param name="p_RangeToSort">Range to sort</param> /// <param name="keyColumn">Index of the column relative to the grid to use as sort keys, must be between start and end col of the range</param> /// <param name="p_bAsc">Ascending true, Descending false</param> /// <param name="p_CellComparer">CellComparer, if null the default comparer will be used</param> public void SortRangeRows(IRangeLoader p_RangeToSort, int keyColumn, bool p_bAsc, IComparer p_CellComparer) { Range l_Range = p_RangeToSort.GetRange(this); SortRangeRows(l_Range, keyColumn, p_bAsc, p_CellComparer); }
/// <summary> /// Sort a range of the grid /// </summary> /// <param name="p_RangeToSort">Range to sort</param> /// <param name="p_AbsoluteColKeys">Index of the column relative to the grid to use as sort keys, must be between start and end column of the range</param> /// <param name="p_bAsc">Ascending true, Descending false</param> /// <param name="p_CellComparer">CellComparer, if null the default comparer will be used</param> public void SortRangeRows(IRangeLoader p_RangeToSort, int p_AbsoluteColKeys, bool p_bAsc, IComparer p_CellComparer) { Range l_Range = p_RangeToSort.GetRange(this); SortRangeRows(l_Range, p_AbsoluteColKeys, p_bAsc, p_CellComparer); }