我有一个包含许多列和行的 DataGridView。我启用了 MutliSelect
,但这允许选择所有单元格。
我想限制垂直、水平、整行或整列的选择,但绝不是两者的混合。用户可以通过从任何单元格开始然后垂直或水平拖动来进行选择。
这里有一张小图来说明它是否有帮助。
最佳答案
Here's the brute force method - when the selection changes, de-select any cells that fall outside the current row/column selection:
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;
}
}
关于c# - 将 DataGridView 单元格多选限制为仅列或行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9610706/