2009-12-04 43 views
1

我有一個DataGridView打開MultiSelect。當SelectionChanged事件被觸發時,我想知道新選擇了哪些項目以及新選擇了哪些項目。例如,如果您選擇了多個項目(通過按住Ctrl單擊),然後釋放Ctrl鍵並選擇一個項目,我想知道哪些項目被取消選擇。我可以跟蹤之前選擇的物品集合,但我只是想確保我沒有想太多。如何確定在DataGridView中更改了哪些項目的選定狀態?

回答

1

這些信息應該在事件參數。

使用RowStateChanged事件。 DataGridViewRowStateChangedEventArgs將包含被點擊的行。如果用戶選擇/取消選擇多行,則將爲選中/取消選擇的每行調用一次事件。

e.Row.Selected將產生該行現在是否選擇或取消選擇。

+0

+1我覺得這是 – 2009-12-05 03:54:18

1

該事件不會確切地告訴你哪些事情發生了變化。如果您因某種原因需要知道,則必須跟蹤以前的選擇。

什麼是你想在響應此事件呢?可能有更簡單的方法來實現你的真正目標。

+0

我希望有一個更簡單的方法最好的解決方案。我的業務對象需要維護項目的選擇。綁定會讓事情變得更容易,但不幸的是,我還沒有想出如何綁定我擁有的東西。我的DataGridView實際上是一個自定義的TreeGridView,它是幕後的一個DataGridView。我的TreeGridView包含3層集合,每個集合都是不同的類型。所以我已經恢復了以更加人工的方式刷新網格中的數據。 – bsh152s

+0

哎呀,我在這裏似乎是錯的。該控件還有另一個可以提供所需信息的事件。請參閱md5sum關於RowStateChanged事件的回答。 – Auraseer

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); 
} 
相關問題