いろいろ備忘録日記

主に .NET と Python絡みのメモを公開しています。

DevExpress奮闘記-101 (ASPxGridView, How to sort groups, CustomColumnSortイベント, カスタムソート, グルーピングした列と別の列でソートする)


よく利用するイベントなのに、よく忘れるのでメモメモ。
このやり方は、ASPxGridViewだけではなく、GridControlでもDXGridでも要領は同じです。


グリッドにて、グルーピングを行った場合、デフォルトではグルーピングした列でソートされます。
通常は、これで大抵よいのですが、場合によっては

グルーピングはA列で行うけど、データの並びはB列の昇順でソートしてほしい。

という場合があります。


このような場合は、カスタムソートイベントを利用してソート処理を実装します。
ASPxGridViewの場合は、CustomColumnSortイベントをハンドルすることで
処理が行えます。


で、一つだけ前提条件がありまして、このイベントを利用する場合
予め列のソート設定(SortMode)をCustomと指定しておく必要があります。
以下のようにします。

<dx:GridViewDataTextColumn Caption="グルーピング対象列" FieldName="ColA" VisibleIndex="0">
  <Settings SortMode="Custom"/>
</dx:GridViewDateTextColumn>


後は、イベントハンドラを記述するだけです。
以下サンプルです。

protected void grdMain_CustomColumnSort(object sender, CustomColumnSortEventArgs e)
{
  if (e.Column == null || e.Column.FieldName != "ColA")
  {
    return;
  }
  
  e.Result  = Comparer.Default.Compare(e.GetRow1Value("ColB"), e.GetRow2Value("ColB"));
  e.Handled = true;
}


これで、ColAをグルーピングした時に、ソートはColBで行われることになります。


以下、参考情報です。
このKBには、ほかにもいろいろなやり方が記述されているので参考になります。


================================
過去の記事については、以下のページからご参照下さい。