1

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

4

3 回答 3

1

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

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

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

于 2009-12-04T20:01:13.993 回答
1

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

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

于 2009-12-04T20:01:59.423 回答
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);
}
于 2009-12-04T20:18:50.650 回答