winforms DataGridView排序后选择行

qni6mghb  于 2023-06-24  发布在  其他
关注(0)|答案(1)|浏览(121)

我在Windows窗体中使用未绑定的DataGridView。一些列启用了“自动”排序(单击列标题进行排序)。
如果没有选择任何行(MyDataGridView.SelectedRows.Count == 0),并且我单击要排序的列标题,则会选择一行。该行恰好是填充DGV时添加到DGV的第一行。这是不良行为;我不希望选择在列排序之前未选择的行。
或者-当我通过单击选择一行,然后使用列标题进行排序时,同一行仍然处于选中状态。这是期望的行为
此外,如果我随后使用MyDataGridView.ClearSelection()以编程方式取消选择所有行,然后进行排序,那么现在将重新选择先前选择的行。这是不受欢迎的行为
每次执行排序(这会导致所选内容更改)时,都会触发“SelectionChanged”事件。不幸的是,我无法辨别事件的原因。这是由于我点击了一行,还是做了排序?
即使我以编程方式执行排序,也会出现此问题。
是否有一种方法可以确保在排序后只选择以前选择的行?我已经搜索了答案,并阅读了一些帖子,但找不到任何有帮助的东西。

qncylg1j

qncylg1j1#

多亏了Jimi,我最终得到了这个解决方案--如果在标题单元格中单击(用于排序),则由CellClick事件设置sortClick标志。它在SelectionChanged事件中拾取,如果设置,将清除DGV选择。

private void ArchersGrid_SelectionChanged(object sender, EventArgs e)                                                                               
{
   if (sortClick)                       
   {
       sortClick = false;
       ArchersGrid.ClearSelection(); // Clear any selection caused by sort (no row to select).
   }
   else            
   {
      // code for any other selection change              
   }                                
}        

private void ArchersGrid_CellClick(object sender, DataGridViewCellEventArgs e)
{
   if (e.RowIndex == -1)
   {
      sortClick = true;
   }
   else
   {
      sortClick = false;
   }
}

相关问题