public SelectedState GetSelectedState(CellRange rng)
 {
     CellRange selection = _grid.Selection;
     if (rng.Contains(selection.Row, selection.Column))
     {
         return SelectedState.Cursor;
     }
     if (_grid.Rows.IsSelected(rng.Row) || _grid.Columns.IsSelected(rng.Column))
     {
         return SelectedState.Selected;
     }
     selection = AdjustSelection(selection, true);
     if (rng.Row < 0 && selection.ContainsColumn(rng.Column) || rng.Column < 0 && selection.ContainsRow(rng.Row))
     {
         return SelectedState.Selected;
     }
     if (_grid.SelectionMode == SelectionMode.ListBox)
     {
         return SelectedState.None;
     }
     if (!rng.Intersects(selection))
     {
         return SelectedState.None;
     }
     return SelectedState.Selected;
 }
 public void RemoveMergedRange(CellRange rng)
 {
     for (int i = 0; i < _mergedRanges.Count; i++)
     {
         if (rng.Intersects(_mergedRanges[i]))
         {
             _mergedRanges.RemoveAt(i);
             i--;
         }
     }
     _grid.Invalidate();
 }