c# - 将 DataGridView 单元格多选限制为仅列或行

标签 c# datagridview

我有一个包含许多列和行的 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/

相关文章:

c# - Json.net 自定义 JsonConvert for Dictionary<string,object>[]

database - vb.net - 具有 BindingSource 和不同 DataSource 的 ComboBox

C# 网格绑定(bind)不更新

c# - 在 .NET 中存储字符串对、创建对象或使用类的最佳方式是什么?

c# - WPF DependencyObject 调用线程异常

c# - ASP.NET MVC 调用存储过程时未提供错误参数

c# - DataGridView/数据集更新

c# - 在 ASP.NET Core 中访问 _Layout.cshtml 中的 cookie

c# - 如何通过双击获取列标题文本

C# 只想在数据表中显示时间(不是日期)