1. 程式人生 > >dev自定義排序,CustomColumnSort--------------------學習筆記

dev自定義排序,CustomColumnSort--------------------學習筆記

一般的控制元件或者元件都支援按照某一列進行排序。但是,這種排序是根據資料來源裡的資料預設按照降序或升序排序的,同時這樣的排序與欄位的型別有關。

假設現在欄位的型別是字串型別 ,但是,儲存的資料時數字加一些特殊的符號例如:20/1 ,1/5,1/30,0/2等等的資料。這時你不想根據字串對它們進行排序,

而是想讓它們按照數字進行排序例如:0/2,1/5,1/30,20/1。進行排序。

一般的排序都可以通過以下幾種方式實現

有時候客戶想要在一個域內對的欄進行分組,而在另一個域內對其排序。本文中,我想描述一下如何通過不同的方法實現這個特點。因為,這並不像它可能看起來的那樣簡單。

在設計時,我們建立了一個簡單的網格,它的資料從資料來源控制元件處獲得。我們想按城市來對ASPxGridView進行分組,而按國家對它進行排序。

這個任務可以通過以下幾種方法來解決:

1.通過自定義欄位排序:按城市將網格分組,但是通過自定義欄位排序事件按國家對其排序。

2.在另一個域內對網格排序:按城市將網格分組,但是通過分組彙總排序資訊類按國家對其排序。

3.通過自定義彙總型別對網格排序:按城市將網格分組,但是通過分組彙總排序資訊類和自定義彙總計算事件按國家對其排序。

4.通過它們的名字對值進行排序:使用GridViewDataComboBoxColumn文字完成分組。

下面已第一種為例,此時就需要做下面兩步就可以實現:

1.設定控制元件後元件的自定義排序屬性:sortModel = custom;

2.再新增一個自定義事件

private void gridView1_CustomColumnSort(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnSortEventArgs e)
{
if (e.Column != null & e.Column.FieldName == "PACKAMOUNT")
{
string[] tempPacks1 = e.Value1.ToString().Split('/');
string[] tempPacks2 = e.Value2.ToString().Split('/');
int res = Comparer.Default.Compare(Convert.ToInt32(tempPacks1[0]), Convert.ToInt32(tempPacks2[0]));
if (res != 0) // 判斷/之後的資料比較
{
e.Result = res;
e.Handled = true;
}
else if (tempPacks1.Length == 2 && tempPacks2.Length == 2)
{
int res1 = Comparer.Default.Compare(Convert.ToInt32(tempPacks1[1]), Convert.ToInt32(tempPacks2[1]));
e.Result = res1;
e.Handled = true;
}
else
{
e.Result = tempPacks1.Length > tempPacks2.Length ? 1 : -1;
e.Handled = true;
}
}
}