Search

'ListView Sorting'에 해당되는 글 1건

  1. 2008.12.15 ListView Sorting

ListView Sorting

프로그래밍 2008.12.15 21:36 Posted by 아일레프

MSDN이나 여타 블로그를 보면 ListView Colum값을 기준으로 Sorting 하는 방법이 나옵니다.
List
의 순서는 그대로 두고 Row들을 Sorting하는 것 같은데요, 만약 List의 순서를 보존해야 할 필요성이 없다면 List자체를 Sorting하는 것도 한 방법일 것 같습니다
.

일단 Sort를 구현 해야 겠죠? 보통 ListView ItemsSource BindingList를 많이 사용하기에 확장 메소드로 QuickSort라는 녀석을 만들었습니다.


public static class Sort

    {

public static void QuickSort<T>(this BindingList<T>  list,Comparison<T> comparer)

        {

            QuickSort<T>(list, comparer, 0, list.Count-1);

        }

 

        private static void QuickSort<T>(BindingList<T> list,Comparison<T> comparer, int startIndex, int endIndex)

        {

            if (startIndex < endIndex)

            {

                int q = Partition<T>(list, comparer, startIndex, endIndex);

                QuickSort<T>(list, comparer, startIndex, q - 1);

                QuickSort<T>(list, comparer, q + 1, endIndex);

            }

        }

 

        private static int Partition<T>(BindingList<T> list,Comparison<T> comparer, int startIndex, int endIndex)

        {

            T item = list[endIndex];

            int i = startIndex - 1;

            for (int j = startIndex; j < endIndex; j++)

            {

                if (comparer(list[j], item) <= 0)

                {

                    i++;

                    Switch<T>(list, i, j);

                }

            }

            Switch<T>(list, i + 1, endIndex);

            return i + 1;

        }

 

        private static void Switch<T>(BindingList<T> list, int i, int j)

        {

            T item = list[i];

            list[i] = list[j];

            list[j] = item;

        }

    }

 
오랜 만에 보는 Quick Sort의 아름다움이란 ㅜ.ㅜ

이제 Sorting을 해주면 됩니다.

그런데 BindingList를 Sorting하는 것 만으로는 ListView의 Row순서가 바뀌지 않습니다. 이 때는 다음과 같이 CollectionView를 Reflesh해주면 됩니다.

ICollectionView collectionView = CollectionViewSource.GetDefaultView(monitoringView.ItemsSource);

collectionView.Refresh();





 

신고