public override void OnMouseUp(CellContext sender, MouseEventArgs e) { base.OnMouseUp(sender, e); //Note: I can't use the click event because I don't have Button information (Control.MouseButtons returns always None inside the Click event) Point currentPoint = sender.Grid.PointToClient(System.Windows.Forms.Control.MousePosition); Rectangle cellRect = sender.Grid.PositionToRectangle(sender.Position); float distance; DevAge.Drawing.RectanglePartType partType = LogicalBorder.GetPointPartType(cellRect, currentPoint, out distance); //eseguo il sort solo se non sono attualmente in resize if (IsSortEnable(sender) && partType == DevAge.Drawing.RectanglePartType.ContentArea && e.Button == System.Windows.Forms.MouseButtons.Left) { Models.ISortableHeader sortHeader = (Models.ISortableHeader)sender.Cell.Model.FindModel(typeof(Models.ISortableHeader)); Models.SortStatus l_Status = sortHeader.GetSortStatus(sender); if (l_Status.Style == DevAge.Drawing.HeaderSortStyle.Ascending) { SortColumn(sender, false, l_Status.Comparer); } else { SortColumn(sender, true, l_Status.Comparer); } } }
protected virtual void PrepareVisualElementSortIndicator(CellContext context) { Models.ISortableHeader sortModel = (Models.ISortableHeader)context.Cell.Model.FindModel(typeof(Models.ISortableHeader)); if (sortModel != null) { Models.SortStatus status = sortModel.GetSortStatus(context); ElementSort.SortStyle = status.Style; } else { ElementSort.SortStyle = DevAge.Drawing.HeaderSortStyle.None; } }
protected override void PrepareView(CellContext context) { base.PrepareView(context); Models.ISortableHeader sortModel = (Models.ISortableHeader)context.Cell.Model.FindModel(typeof(Models.ISortableHeader)); if (sortModel != null) { Models.SortStatus status = sortModel.GetSortStatus(context); Background.SortStyle = status.Style; } else { Background.SortStyle = DevAge.Drawing.HeaderSortStyle.None; } }
public override void OnMouseUp(CellContext sender, MouseEventArgs e) { base.OnMouseUp(sender, e); //Note: I can't use the click event because I don't have Button information (Control.MouseButtons returns always None inside the Click event) Point currentPoint = sender.Grid.PointToClient(System.Windows.Forms.Control.MousePosition); Rectangle cellRect = sender.Grid.PositionToRectangle(sender.Position); float distance; DevAge.Drawing.RectanglePartType partType = LogicalBorder.GetPointPartType(cellRect, currentPoint, out distance); //eseguo il sort solo se non sono attualmente in resize if (IsSortEnable(sender) && partType == DevAge.Drawing.RectanglePartType.ContentArea && e.Button == System.Windows.Forms.MouseButtons.Left) { // AlanP: Dec 2013. Do not do a sort if the MouseUp is after a coulmnWidthResize Resizable resizableHeader = (Resizable)sender.Cell.Controller.FindController(typeof(Resizable)); if (resizableHeader != null) { // If the mouse down initiated a resize of the header on this cell we don't want to do a sort if (resizableHeader.MouseDownStartedWidthResize) { return; } } Models.ISortableHeader sortHeader = (Models.ISortableHeader)sender.Cell.Model.FindModel(typeof(Models.ISortableHeader)); Models.SortStatus l_Status = sortHeader.GetSortStatus(sender); if (l_Status.Style == DevAge.Drawing.HeaderSortStyle.Ascending) { SortColumn(sender, false, l_Status.Comparer); } else { SortColumn(sender, true, l_Status.Comparer); } } }
/// <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); } } }