2012-04-07 95 views
1

我試圖重寫datagridview的標準排序方法。如何讓應用程序使用我的函數(方法?)而不是默認的?當用戶點擊某個列時,此事件應該會觸發。覆蓋表單事件

private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
{ 
    //Sort stuff. 
} 
+0

爲什麼不簡單地把DataGridViewColumn.SortMode屬性放到DataGridViewColumnSortMode.Programmatic中,然後實現你的System.Collections.IComparer並調用DataGridView1.Sort(new YourComparer())? – 2012-04-07 17:15:31

+0

@AndriyBuday但是,當用戶單擊列標題時,如何使其調用'DataGridView1.Sort(new YourComparer())'?我不想使用單獨的按鈕... – natli 2012-04-07 17:25:23

+0

還有SortCompare事件。請閱讀此處:http://msdn.microsoft.com/en-us/library/ms171608.aspx。會有這樣的事情爲你工作嗎? – 2012-04-07 17:28:30

回答

3

我覺得這個topic會對你很有意思,因爲它符合你的要求。

一般而言,根據您的要求,您可以使用少量技術在DataGridView中進行自定義排序。

  1. 使用編程排序。 (您需要手動調用Sort)

  2. 使用SortCompare事件,該事件將在ColumnHeaderMouseClick上調用。 (對於綁定的DataGridView)

  3. 創建您自己的System.Collections.IComparer。 (用於未綁定的datagridview)

這兩個都可以在msdn page here找到。 另請發現這個page解釋何時可以使用哪種技術。

+0

謝謝。我只需要添加'dataGridView1.ColumnHeaderMouseClick + = new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridView1_ColumnHeaderMouseClick);'DataGridViewColumnSortMode.Programmatic'的Form構造函數來開始使用我的方法。現在工作正常。 – natli 2012-04-07 18:17:58

0

不能覆蓋事件,起因事件後實際控制方法執行引發的。 爲了能夠做點什麼之前,你需要擴展DataGrid控制和覆蓋在它裏面一個功能,就像這樣:

一個pesudocode

public class MyDataGrid : DataGridView 
{ 
    public override void ColumnHeaderMouseClick(...) 
    { 
     //insert here your code and comment last line, so base class will not call it's own implementation 

     base.ColumnHeaderMouseClick(...); //after execution of this, the event is reaised 
    } 
} 

Riminder:這是一個如何處理這種情況的基本方法,你必須檢查這個代碼是否在你的案件

希望這會有所幫助。