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