自定义DataGridView选择模式

时间:2014-03-10 15:30:39

标签: c# winforms datagridview

所以我到处搜索试图找到我的问题的答案但是每个人在默认情况下选择单元格的方式似乎都没问题(在一个方框中)。

我正在使用十六进制编辑器,目前将SelectionMode设置为默认的RowHeaderSelect,并将MultiSelect设置为true。 我的问题是,当你单击一个单元格并拖动选择时,它会选择一个盒子形状的单元格(如excel)。这不是我需要它来选择细胞的方式。

我目前通过处理以下事件来解决这个问题,CellMouseDown,CellMouseEnter,CellMouseUp,&的MouseUp。 这给了我正在寻找的选择,但在拖动选择期间默认的框选择样式仍然存在。

此代码示例发生在CellMouseUp上,并提供我正在寻找的选择样式。第一张照片是我的选择在下面的代码运行后的样子(CellMouseUp)。第二张图是你拖动时发生的事情(下面的代码在CellMouseEnter上运行也是拖动时自定义选择)但它产生了这个视觉错误,因为它超出默认选择框样式(excel样式)而取消选择整个列。

编辑:在鼠标向上和鼠标按下发生后澄清选择是否有效 (dgvMainBinary.ClearSelection()然后代码如下) 这是拖动过程中发生的可视错误。我唯一能想到的是在我的CellMouseEnter事件之后运行的默认框选择模式。

任何帮助将不胜感激,谢谢。

        for (int row = startY; row <= endY; row++)
        {
            int startColumn = 0;
            int endColumn = 15;
            if (row == startY)
            {
                startColumn = startX;
                if (startY == endY)
                    endColumn = endX;
            }
            else if (row == endY)
            {
                endColumn = (endX < 16)?endX:15;
            }
            for (int column = startColumn; column <= endColumn; column++)
            {
                dgvMainBinary.Rows[row].Cells[column].Selected = true;
            }
        }

image1

image2

1 个答案:

答案 0 :(得分:0)

一种方法是清除MouseUp事件处理程序中的选定单元格,并在清除DataGridView默认逻辑完成的选择后执行选择逻辑。

void dataGridView1_MouseUp(object sender, MouseEventArgs e)
{            
    dataGridView1.ClearSelection();           
    // do your selection logic here
}