C# 单击复选框单元格时防止在datagrid中选择行

C# 单击复选框单元格时防止在datagrid中选择行,c#,datagridview,checkbox,selection,C#,Datagridview,Checkbox,Selection,我有一个DataGridView,其中每一行都有一个复选框。我只希望在用户单击其中一个文本单元格时更改所选行。但是,如果单击复选框,我仍然希望该复选框更改其状态并捕获此事件 我到处搜索,找到了一些解决方案,解决了一半的问题,但我没有找到任何能够100%防止选中行在单击复选框时发生更改的解决方案。找到了解决方法 我没有监听SelectionChanged事件,而是监听CellMouseClick事件,然后切换我自己选择的行的标志 我还更改了默认的行样式,这样就没有选择哪一行的指示。然后,我添加了一

我有一个DataGridView,其中每一行都有一个复选框。我只希望在用户单击其中一个文本单元格时更改所选行。但是,如果单击复选框,我仍然希望该复选框更改其状态并捕获此事件


我到处搜索,找到了一些解决方案,解决了一半的问题,但我没有找到任何能够100%防止选中行在单击复选框时发生更改的解决方案。

找到了解决方法

我没有监听SelectionChanged事件,而是监听CellMouseClick事件,然后切换我自己选择的行的标志

我还更改了默认的行样式,这样就没有选择哪一行的指示。然后,我添加了一些代码来更改根据我自己的行选择的任何行的行样式。
下面的代码仅用于在某些列上侦听CellMouseClicks,其余的代码非常特定于我的应用程序

    void dataGridView_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        // Make sure it is a left click
        if(e.Button == MouseButtons.Left)
        {
            // Make sure it is on a cell
            if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
            {
                // Only allow certain columns to trigger selection changes (1 & 2)
                if (e.ColumnIndex == 1 || e.ColumnIndex == 2)
                {
                    // Set my own private selected row index
                    setSelectedRow(e.RowIndex);
                }
                else
                {
                    // Actions for other columns...
                }
            }
        }
    }

想出一个解决办法

我没有监听SelectionChanged事件,而是监听CellMouseClick事件,然后切换我自己选择的行的标志

我还更改了默认的行样式,这样就没有选择哪一行的指示。然后,我添加了一些代码来更改根据我自己的行选择的任何行的行样式。
下面的代码仅用于在某些列上侦听CellMouseClicks,其余的代码非常特定于我的应用程序

    void dataGridView_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        // Make sure it is a left click
        if(e.Button == MouseButtons.Left)
        {
            // Make sure it is on a cell
            if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
            {
                // Only allow certain columns to trigger selection changes (1 & 2)
                if (e.ColumnIndex == 1 || e.ColumnIndex == 2)
                {
                    // Set my own private selected row index
                    setSelectedRow(e.RowIndex);
                }
                else
                {
                    // Actions for other columns...
                }
            }
        }
    }