如何确定DataGridView中哪些项目的选定状态已更改?

时间:2009-12-04 19:51:54

标签: c# datagridview selection multi-select

我有一个打开MultiSelect的DataGridView。当SelectionChanged事件被触发时,我想知道新选择的项目和新取消选择的项目。例如,如果您选择了多个项目(通过按住Ctrl键单击),然后释放Ctrl键并选择一个项目,我想知道取消选择了哪些项目。我可以跟踪之前选择的项目集合,但我只是想确保我没有想太多。

3 个答案:

答案 0 :(得分:1)

该信息应该在事件参数中。

使用RowStateChanged事件。 DataGridViewRowStateChangedEventArgs将包含单击的行。如果用户选择/取消选择多行,则对于选择/取消选择的每一行,将调用一次该事件。

e.Row.Selected将产生现在是选中还是取消选择的行。

答案 1 :(得分:1)

该事件并未准确告诉您哪些事情发生了变化。如果您由于某种原因需要知道,则必须跟踪之前的选择。

为了回应这个事件你想做什么?可能有一种更容易实现真正目标的方法。

答案 2 :(得分:0)

此信息并非DataGridView的固有信息。但是,您可以在提供此信息的DataGridView周围编写一个包装器。

public static void OnSelectionChanged(
  this DataGridView view,
  Action<List<DataGridViewRow>,List<DataGridViewRow>> handler) {
  var oldSelection = view.SelecetedRows.Cast<DataGridViewRow>.ToList();
  view.SelectedChanged += (sender,e)  {
    var newSelection = view.SelectedRows.Cast<DataGridViewRow>.ToList();
    handler(oldSelection,newSelection);
    oldSelection = newSelection;
  };
}

用例

void HandleSelectionChanged(List<DataGridViewRow> oldRows, List<DataGridViewRow> newRows) {
  ..
}

void FormLoaded() {
  myDataGridView.OnSelectionChanged(HandleSelectionChanged);
}