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