newtype
::: newtype의 지식창고 :::
newtype
전체 방문자
오늘
어제
  • 분류 전체보기 (392)
    • Dev (214)
      • C, C++ (43)
      • Go (5)
      • Web (49)
      • DBMS (21)
      • DevOps (8)
      • Java (2)
      • Windows, Win32 (4)
      • Visual Basic (5)
      • C# (2)
      • Mobile (25)
      • SQL CE (7)
      • Google Map (6)
      • Python (2)
      • cygwin (2)
      • 기타 (32)
      • Ruby (1)
    • 명언 (10)
    • 모임 (18)
      • 붕주회 (3)
      • 신흥컴정 (14)
      • 웹20기 (1)
    • 사진 (8)
    • 불펌 (29)
    • 막글 (98)
    • 게임 (6)
    • 여행 (8)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

  • whoami
05-13 00:00
hELLO · Designed By 정상우.
newtype

::: newtype의 지식창고 :::

Dev/C#

ListView의 컬럼 해더 클릭시 소트 구현

2003. 1. 16. 16:12
1. 폼 클래스의 맴버 변수를 선언 합니다.
public class form1 : System.Windows.Forms.Form
{
    // ListView의 정렬 방법을 저장하기위한
    private SortOrder[] arrSortOrder;


2. 리스트가 초기화 되는 부분에 아래 코드를 추가합니다.
   // 리스트의 값을 넣었으면.. 컬럼별 정렬 방법설정
arrSortOrder.Initialize();
arrSortOrder = new SortOrder[lvAddress.Columns.Count];
for(int i=0; i
    arrSortOrder[i] = SortOrder.None;



3. 해더클릭 이벤트를 아래와 같이 코딩합니다.
private void listView1_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
{
  if ( arrSortOrder[e.Column] != SortOrder.Ascending )
       arrSortOrder[e.Column] = SortOrder.Ascending;
  else
       arrSortOrder[e.Column] = SortOrder.Descending;

  SortColumn ( e.Column );
}


4. 소트를 위한 비교 클래스를 아래와 같이 코딩합니다.
private class Comparer : IComparer
{
   private int m_Column;
   private bool m_bNumeric;
   private System.Windows.Forms.SortOrder m_SortOrder;

   public int Compare( object Object1 , object Object2 )
   {
       if( !(Object1 is ListViewItem) && !(Object2 is ListViewItem) )
       return 0;

       ListViewItem lv1 = (ListViewItem) Object1;
       ListViewItem lv2 = (ListViewItem) Object2;

      if ( m_SortOrder == System.Windows.Forms.SortOrder.Descending )
      {
       ListViewItem lvTemp;
       lvTemp = lv1;
       lv1 = lv2;
       lv2 = lvTemp;
       }

       if (m_bNumeric)
               return (Convert.ToInt32 (lv1.SubItems[m_Column].Text) -  Convert.ToInt32 (lv2.SubItems[m_Column].Text ));
       else
       return String.Compare( lv1.SubItems[m_Column].Text, lv2.SubItems[m_Column].Text );
   }

   public System.Windows.Forms.SortOrder SortOrder
   {
       set
       {
       m_SortOrder = value ;
       }
   }

   public bool bNumeric
   {
       set
       {
       m_bNumeric = value ;
       }
    }

    public int Column
    {
        set
        {
       m_Column = value ;
        }
     }
}


5. 컬럼소트함수를 작성합니다..
public void SortColumn( int iColumn )
{
   Comparer lvc = new Comparer ();

   lvc.SortOrder = arrSortOrder[iColumn];

   try
   {
       string s1 = listView1.Items[1].SubItems[iColumn].Text.ToUpper().Trim();
       long lng = Convert.ToInt32 (s1);
       lvc.bNumeric = true;
   }
   catch (Exception ex)
   {
       lvc.bNumeric = false;
   }

   lvc.Column = iColumn ;
   listView1.ListViewItemSorter = lvc;
}


뉴스그룹:microsoft.public.dotnet.framework.windowsforms의
Piyush(piy_9679@indiatimes.com)님
"Sort Multiple ListView Columns"소스를
오름/내림 차순 정렬이 가능하도록 수정했습니다.
반응형

'Dev > C#' 카테고리의 다른 글

MFC 프로젝트 버전 일괄 변경 툴  (0) 2017.08.30
    'Dev/C#' 카테고리의 다른 글
    • MFC 프로젝트 버전 일괄 변경 툴
    newtype
    newtype
    지극히 개인적인 지식의 창고

    티스토리툴바