我試圖重寫datagridview的標準排序方法。如何讓應用程序使用我的函數(方法?)而不是默認的?當用戶點擊某個列時,此事件應該會觸發。覆蓋表單事件
private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
//Sort stuff.
}
我試圖重寫datagridview的標準排序方法。如何讓應用程序使用我的函數(方法?)而不是默認的?當用戶點擊某個列時,此事件應該會觸發。覆蓋表單事件
private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
//Sort stuff.
}
我覺得這個topic會對你很有意思,因爲它符合你的要求。
一般而言,根據您的要求,您可以使用少量技術在DataGridView中進行自定義排序。
使用編程排序。 (您需要手動調用Sort)
使用SortCompare事件,該事件將在ColumnHeaderMouseClick上調用。 (對於綁定的DataGridView)
創建您自己的System.Collections.IComparer。 (用於未綁定的datagridview)
這兩個都可以在msdn page here找到。 另請發現這個page解釋何時可以使用哪種技術。
謝謝。我只需要添加'dataGridView1.ColumnHeaderMouseClick + = new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridView1_ColumnHeaderMouseClick);'DataGridViewColumnSortMode.Programmatic'的Form構造函數來開始使用我的方法。現在工作正常。 – natli 2012-04-07 18:17:58
不能覆蓋事件,起因事件後實際控制方法執行引發的。 爲了能夠做點什麼之前,你需要擴展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:這是一個如何處理這種情況的基本方法,你必須檢查這個代碼是否在你的案件。
希望這會有所幫助。
爲什麼不簡單地把DataGridViewColumn.SortMode屬性放到DataGridViewColumnSortMode.Programmatic中,然後實現你的System.Collections.IComparer並調用DataGridView1.Sort(new YourComparer())? – 2012-04-07 17:15:31
@AndriyBuday但是,當用戶單擊列標題時,如何使其調用'DataGridView1.Sort(new YourComparer())'?我不想使用單獨的按鈕... – natli 2012-04-07 17:25:23
還有SortCompare事件。請閱讀此處:http://msdn.microsoft.com/en-us/library/ms171608.aspx。會有這樣的事情爲你工作嗎? – 2012-04-07 17:28:30