반응형
c# 리스트뷰에서 컬럼을 클링했을 때, 출력된 아이템을 행으로 정렬하는 코드입니다.
사실 코드는 인터넷 여행을 하다가 찾은거고, 셀프 스터디를 하는 목적으로 글을 남깁니다.
혹시 수정이나 보충하고 싶은 부분이 있으면 댓글로 달아주시면 감사하겠습니다.
1. 리스트뷰 이벤트 생성
리스트뷰 이벤트에서 ColumnClick 칸을 더블클릭해서 자동으로 이벤트를 만들어 줍니다.
2. 리스트뷰 컬럼클릭이벤트 코드 생성
//정렬
if (listView_calData.Sorting == SortOrder.Ascending)
{
listView_calData.Sorting = SortOrder.Descending;
}
else
{
listView_calData.Sorting = SortOrder.Ascending;
}
listView_calData.ListViewItemSorter = new Sorter(); // * 1
Sorter s = (Sorter)listView_calData.ListViewItemSorter;
s.Order = listView_calData.Sorting;
s.Column = e.Column;
listView_calData.Sort();
컬럼을 클릭할 때마다 토글형태로 Ascending 과 Descending 이 바뀌도록 합니다.
ListViewItemSorter 클래스를 생성합니다.
3. ListViewItemSorter 코드
class Sorter : System.Collections.IComparer
{
public int Column = 0;
public System.Windows.Forms.SortOrder Order = SortOrder.Ascending;
public int Compare(object x, object y) // IComparer Member
{
if (!(x is ListViewItem))
return (0);
if (!(y is ListViewItem))
return (0);
ListViewItem l1 = (ListViewItem)x;
ListViewItem l2 = (ListViewItem)y;
if (l1.ListView.Columns[Column].Tag == null)
{
l1.ListView.Columns[Column].Tag = "Text";
}
if (l1.ListView.Columns[Column].Tag.ToString() == "Numeric")
{
string str1 = l1.SubItems[Column].Text;
string str2 = l2.SubItems[Column].Text;
if (str1 == "")
{
str1 = "99999";
}
if (str2 == "")
{
str2 = "99999";
}
float fl1 = float.Parse(str1);
float fl2 = float.Parse(str2);
if (Order == SortOrder.Ascending)
{
return fl1.CompareTo(fl2);
}
else
{
return fl2.CompareTo(fl1);
}
}
else
{
string str1 = l1.SubItems[Column].Text;
string str2 = l2.SubItems[Column].Text;
if (str1 == "")
{
str1 = "99999";
}
if (str2 == "")
{
str2 = "99999";
}
float fl1 = float.Parse(str1);
float fl2 = float.Parse(str2);
if (Order == SortOrder.Ascending)
{
return fl1.CompareTo(fl2);
}
else
{
return fl2.CompareTo(fl1);
}
}
}
}
숫자든 문자열이든 구분하여 리스트뷰를 정렬합니다.
반응형
'Programming > c# 스터디' 카테고리의 다른 글
C# 4번째 스터디 노트 - 연산자 (0) | 2020.03.19 |
---|---|
C# 세번째 강의노트 - 매소드 (method) (0) | 2020.03.17 |
C# 두번째 강의노트 - DataType (0) | 2020.03.16 |
C# 1일차 - 스터디노트 (비주얼스튜디오 처음 시작하기, String 관련 함수 사용+공용컨트롤이 마우스 드래그로 이동이 안될 경우 해결방법) (0) | 2020.03.13 |
비주얼 스튜디오 커뮤니티 (Visual studio community) 한글 패치 방법 (0) | 2019.08.31 |
댓글