private void Selection_SelectionChange(object sender, SelectionChangedEventArgs e) { if (EnableRowColSpan) { if (e.EventType == SelectionChangedEventType.Add) { for (int r = e.Range.Start.Row; r <= e.Range.End.Row; r++) { for (int c = e.Range.Start.Column; c <= e.Range.End.Column; c++) { ICell l_Cell = this[r, c]; if (l_Cell != null) { Range l_Range = l_Cell.Range; if (l_Range != new Range(new Position(r, c))) { Selection.AddRange(l_Range); } } } } } else if (e.EventType == SelectionChangedEventType.Remove) { for (int r = e.Range.Start.Row; r <= e.Range.End.Row; r++) { if (Selection.SelectionMode != GridSelectionMode.Row) { for (int c = e.Range.Start.Column; c <= e.Range.End.Column; c++) { ICell l_Cell = this[r, c]; if (l_Cell != null) { Range l_Range = l_Cell.Range; if (l_Range != new Range(new Position(r, c))) { Selection.RemoveRange(l_Range); } } } } else if (Selection.ContainsRow(e.Range.Start.Row)) { Selection.RemoveRange(new Range(new Position(r, 0), new Position(r, ColumnsCount - 1))); } } } } }
/// <summary> /// Fired when a cell is added from the selection or removed from the selection /// </summary> /// <param name="e">The <see cref="Fr.Medit.MedDataGrid.SelectionChangedEventArgs"/> instance containing the event data.</param> protected virtual void OnSelectionChange(SelectionChangedEventArgs e) { ClearCache(); if (e.EventType == SelectionChangedEventType.Add || e.EventType == SelectionChangedEventType.Remove) { this.grid.InvalidateRange(e.Range); } else { this.grid.InvalidateCells(); } if (SelectionChanged != null) { SelectionChanged(this, e); } }