즐겁게 개발을...

개발보다 게임이 더 많이 올라오는 것 같은...

개발/C# + DevExpress

[2021.04] C# + DevExpress Grid에서 문자로 된 숫자 정렬하기

다물칸 2021. 4. 13. 17:53
728x90
반응형

3, 2, 1, 11, 5, 6, 7, 8, 9, 10, 4, 12

 

이렇게 숫자가 있다고 치자. 이것을 DevExpress에서 정렬하라고 하면 다음처럼 정렬된다.

 

1, 10, 11, 2, 3, 4, 5, 6, 7, 8, 9

 

이는 숫자가 아닌 문자로 정렬되기 때문이다. 열의 속성을 숫자형태로 하면 자동으로 숫자로 정렬되는 뭔가가 있으면 좋겠으나 DevExpress에서는 CustomColumnSort()라는 메서드를 제공해준다. 

 

정렬하고자 하는 컬럼의 속성 중 SortMode를 Custom으로 수정한다. 컬럼을 그리드에 추가해주는 로직 다음에 추가해주면 된다. 

 

treeDICOM.Columns["col1"].SortMode = DevExpress.XtraGrid.ColumnSortMode.Custom;
treeDICOM.Columns["col2"].SortMode = DevExpress.XtraGrid.ColumnSortMode.Custom;

 

그리드의 CusCustomColumnSort() 이벤트를 추가하자. 

필자는 TreeList를 이용 해보았다. 

        private void tree_CustomColumnSort(object sender, CustomColumnSortEventArgs e)
        {
            switch (e.Column.FieldName)
            {
                case "col1":
                case "col2":
                    try
                    {
                        int value1 = Convert.ToInt32(e.NodeValue1);
                        int value2 = Convert.ToInt32(e.NodeValue2);
                        e.Result = value1.CompareTo(value2);
                    } catch { }
                    break;
                default:
                    return;
            }
        }

 

수정 전 그리드에서 소트한 모습

수정 후 그리드에서 정렬한 모습

반응형