ColumnView.CustomColumnSort イベントのドキュメントに目を通して、次の行を確認することをお勧めします。
以下に示すように、カスタム比較の結果を CustomColumnSortEventArgs.Result パラメータに設定する必要があります。
- データが昇順でソートされているときに、最初の行を 2 番目の行の上に配置する必要がある場合は、Result を -1 に設定します。データを降順に並べ替えると、1 行目は 2 行目の下に配置されます。
- データが昇順でソートされているときに、最初の行を 2 番目の行の下に配置する必要がある場合は、Result を 1 に設定します。データを降順に並べ替えると、1 行目が 2 行目より上に配置されます。
-
Result を 0 に設定して、行が等しいことを示します。この場合、行はデータ ソース内のインデックスに従ってグリッド内に配置されます。
注:
現在
の比較操作が であった場合、CustomColumnSortEventArgs.Handledパラメータを に設定する必要があります。このパラメーターを false に設定したままにして、イベント ハンドラーの終了後に既定の比較メカニズムを呼び出すことができます。この場合、カスタム比較操作の結果は無視されます。true
handled
例を確認してください:
protected void grid_CustomColumnSort
(object sender, DevExpress.Web.ASPxGridView.CustomColumnSortEventArgs e) {
if (e.Column.FieldName == "Country") {
e.Handled = true;
string s1 = e.Value1.ToString(), s2 = e.Value2.ToString();
if (s1.Length > s2.Length)
e.Result = 1;
else
if (s1.Length == s2.Length)
e.Result = Comparer.Default.Compare(s1, s2);
else
e.Result = -1;
}
}
次のようなイベントで比較コードを実装することもできます。
if (e.Column.FieldName == "Importance")
{
int n1 = (int)gridControl1.GetCellValue(e.ListSourceRowIndex1, "Rank");
int n2 = (int)gridControl1.GetCellValue(e.ListSourceRowIndex2, "Rank");
e.Result = Comparer<int>.Default.Compare(n1, n2); /// comparator here, that set the e.result
e.Handled = true;
}
参考文献:
方法: カスタム ソート DXGrid を実装するCustomColumnSort
が正しくソートされない
CustomColumnSort が機能しない
カスタム ソート イベントを発生させるコード スニペットを確認するには、このナレッジベース記事「カスタム ソートの実装方法」に従ってください。この助けを願っています:
public partial class GridCustomSortTest : Form
{
public GridCustomSortTest()
{
InitializeComponent();
}
private void GridCustomSortTest_Load(object sender, EventArgs e)
{
string[] months = new string[] { "January", "February", "March",
"April", "May", "June", "July", "August", "September",
"October", "November", "December" };
grid.DataSource = months;
grid.RefreshDataSource();
gridView1.Columns[0].SortMode = DevExpress.XtraGrid.ColumnSortMode.Custom;
gridView1.CustomColumnSort += new DevExpress.XtraGrid.Views.Base.CustomColumnSortEventHandler(gridView1_CustomColumnSort);
}
void gridView1_CustomColumnSort(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnSortEventArgs e)
{
e.Result = Comparer<int>.Default.Compare(e.ListSourceRowIndex1,
e.ListSourceRowIndex2);
e.Handled = true;
}
}