Ограничение множественного выбора ячейки DataGridView только столбцом или строкой - PullRequest
3 голосов
/ 08 марта 2012

У меня есть DataGridView с количеством столбцов и строк.У меня включен MutliSelect, но это позволяет выделить все ячейки.

Я хочу ограничить выбор по вертикали, горизонтали, полной строке или полному столбцу, но никогда не смешивать их обе.Пользователь может выбрать, перетаскивая, начиная с любой ячейки, а затем вертикально или горизонтально.

Вот небольшая диаграмма, чтобы уточнить, помогает ли это вообще.

image

1 Ответ

4 голосов
/ 08 марта 2012

Вот метод грубой силы - когда выбор изменяется, отмените выделение любых ячеек, которые выходят за пределы текущего выбора строки / столбца:

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...