Exemple #1
0
        /// <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);
                            }
                        }
                    }
                }
            }
        }
Exemple #3
0
        /// <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);
                }
            }
        }
Exemple #4
0
		/// <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);
 }