Datagridview SelectionMode Alternative

时间:2014-07-22 14:55:47

标签: vb.net datagridview selection

我正在尝试修改为datagridview选择的方式,以便它以与文本选择类似的方式进行选择。

目前,当在多行中选择一系列单元格时,仅突出显示所选单元格。 Standard Selection

然而,我想要做的是当第二行被选中时,它还选择第一个选定单元格右侧的所有单元格,并选择第二个选定单元格的所有单元格,与高亮显示完全相同浏览器中的文字。

Banded Selection

我可以设置一些属性或模式来使datagridview选择的行为如下吗?

2 个答案:

答案 0 :(得分:0)

您可以使用内置MonthCalendar控件:

enter image description here

  

Windows窗体MonthCalendar控件一次最多可显示12个月。默认情况下,控件仅显示一个月,但您可以指定显示的月数以及它们在控件中的排列方式。更改日历维度时,将调整控件的大小;所以请确保表格上有足够的空间用于新尺寸。

答案 1 :(得分:0)

您可以尝试捕捉鼠标,移动和提升事件以及自己处理选择。这适用于从上到下拖动,需要添加额外的逻辑来拖动另一个方向,但这对您来说应该是可行的。

    { 
        dataGridView1.CellMouseDown += dataGridView1_CellMouseDown;
        dataGridView1.CellMouseMove += dataGridView1_CellMouseMove;
        dataGridView1.CellMouseUp += dataGridView1_CellMouseUp;
        dataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect;
    }

    int startRow;
    int startColumn;
    bool beginSelection;

    void dataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
    {
        beginSelection = false;
    }

    void dataGridView1_CellMouseMove(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (!beginSelection) 
            return;

        dataGridView1.ClearSelection();

        int curRow = e.RowIndex;
        int curCol = e.ColumnIndex;

        for (int r = startRow; r <= curRow; r++)
        {
            int maxC = dataGridView1.ColumnCount-1;
            int minC = 0;
            if (r == curRow)
                maxC = curCol;
            if (r == startRow)
                minC = startColumn;
            for (int c = minC; c <= maxC; c++)
            {
                dataGridView1[c,r].Selected = true;
            }
        }
    }

    void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
    {
        beginSelection = true;
        startRow = e.RowIndex;
        startColumn = e.ColumnIndex;
    }