将DataGridView单元格多选选项限制为仅限列或行

时间:2012-03-07 23:22:33

标签: c# datagridview

我有一个包含许多列和行的DataGridView。我已启用MutliSelect,但这允许选择所有单元格。

我想限制垂直,水平,整行或全列的选择,但绝不要两者兼而有之。用户可以选择从任何单元格开始拖动,然后垂直或水平拖动。

这是一个小图,以阐明它是否有帮助。

1 个答案:

答案 0 :(得分:4)

这是强力方法 - 当选择发生变化时,取消选择落在当前行/列选择范围之外的任何单元格:

int _selectedRow = -1;
int _selectedColumn = -1;
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
    switch (dataGridView1.SelectedCells.Count)
    {
        case 0:
            // store no current selection
            _selectedRow = -1;
            _selectedColumn = -1;
            return;
        case 1:
            // store starting point for multi-select
            _selectedRow = dataGridView1.SelectedCells[0].RowIndex;
            _selectedColumn = dataGridView1.SelectedCells[0].ColumnIndex;
            return;
    }

    foreach (DataGridViewCell cell in dataGridView1.SelectedCells)
    {
        if (cell.RowIndex == _selectedRow)
        {
            if (cell.ColumnIndex != _selectedColumn)
            {
                _selectedColumn = -1;
            }
        }
        else if (cell.ColumnIndex == _selectedColumn)
        {
            if (cell.RowIndex != _selectedRow)
            {
                _selectedRow = -1;
            }
        }
        // otherwise the cell selection is illegal - de-select
        else cell.Selected = false;
    }
}