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