C# 允许用户在DataGridViewImageCell中单击,但不更改现有行选择

C# 允许用户在DataGridViewImageCell中单击,但不更改现有行选择,c#,winforms,datagridview,C#,Winforms,Datagridview,我有以下DataGridView,前两列是DataGridViewImageCell 我想知道的是,我希望用户能够单击带有加号的第一个单元格,并运行其单击方法,但不更改当前选定的行 我不希望任何事情发生,如果点击第二列,没有点击事件没有选择改变 目前,我刚刚在CellContentClick中运行了click事件 有没有办法做到这一点?创建全局变量private List selectedRows=new List,然后在cellClick事件中使用此选项: private void dataG

我有以下DataGridView,前两列是DataGridViewImageCell

我想知道的是,我希望用户能够单击带有加号的第一个单元格,并运行其单击方法,但不更改当前选定的行

我不希望任何事情发生,如果点击第二列,没有点击事件没有选择改变

目前,我刚刚在CellContentClick中运行了click事件

有没有办法做到这一点?

创建全局变量private List selectedRows=new List,然后在cellClick事件中使用此选项:

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex != 0 && e.ColumnIndex != 1)
    {
        if (dataGridView1.Rows[e.RowIndex].Selected == false)
        {
            dataGridView1.Rows[e.RowIndex].Selected = true;
            selectedRows.Add(e.RowIndex);
        }
        else
        {
            dataGridView1.Rows[e.RowIndex].Selected = false;
            selectedRows.Remove(e.RowIndex);
        }
    }
    else
    {
        dataGridView1.ClearSelection();
        //Do your job here for that column/row
        foreach(int r in selectedRows)
        {
            dataGridView1.Rows[r].Selected = true;
        }
    }
}

这里有一个解决方案,它将首先防止不必要的选择发生。您可能希望将其更改为默认的正常选择模式..:

private void dataGridView1_CellMouseMove(object sender, 
                                         DataGridViewCellMouseEventArgs e)
{
    dataGridView1.SelectionMode = e.ColumnIndex == yourImageColumIndex ?
                  DataGridViewSelectionMode.RowHeaderSelect : 
                  DataGridViewSelectionMode.FullRowSelect;    // or whatever you want
}

我不知道是否有内置方法或某种快速方法,但如果您没有找到任何东西,我想做的是在选择索引后将所有选定行存储到列表中,如果用户单击第一列或第二列,您只需执行该操作,取消选择全部,然后选择列表中的内容。这不是最优雅的,但这是一个解决办法!将其粘贴在回答中@Aleksaristic如果有人回答其他问题,您可以更改选择模式吗?
private void dataGridView1_CellMouseMove(object sender, 
                                         DataGridViewCellMouseEventArgs e)
{
    dataGridView1.SelectionMode = e.ColumnIndex == yourImageColumIndex ?
                  DataGridViewSelectionMode.RowHeaderSelect : 
                  DataGridViewSelectionMode.FullRowSelect;    // or whatever you want
}