Dev/C#
ListView의 컬럼 해더 클릭시 소트 구현
newtype
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"소스를
오름/내림 차순 정렬이 가능하도록 수정했습니다.
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"소스를
오름/내림 차순 정렬이 가능하도록 수정했습니다.
반응형