반응형

C# -- ListView 컬럼 제목 click 시 정렬하기 ; 내림차순, 오름차순


참고 : https://msdn.microsoft.com/en-us/library/ms996467.aspx

       https://msdn.microsoft.com/en-us/library/system.windows.forms.listview.columnheadercollection(v=vs.110).aspx

       https://msdn.microsoft.com/ko-kr/library/system.collections.icomparer(v=vs.110).aspx

       https://www.youtube.com/watch?v=kWVgcQk7VIo




using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ListView_sort2
{
public partial class Form1 : Form
{
private int sortColumn = -1;
private String[] listview_columnTitle = { "aa", "bb", "cc" };
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
start_ListView();
add_items();
}
private void start_ListView()
{
// throw new NotImplementedException();
listView1.View = View.Details;
listView1.GridLines = true;
listView1.FullRowSelect = true;
int listview_width = listView1.ClientSize.Width;
int col_width = listview_width / 3;
listView1.Columns.Add(listview_columnTitle[0], col_width, HorizontalAlignment.Center);
listView1.Columns.Add(listview_columnTitle[1], col_width, HorizontalAlignment.Center);
listView1.Columns.Add(listview_columnTitle[2], col_width, HorizontalAlignment.Center);
}
private void add_items()
{
ListViewItem newitem = new ListViewItem(new String[] { "c1", "5", "2" });
listView1.Items.Add(newitem);
ListViewItem newitem2 = new ListViewItem(new String[] { "b1", "4", "3" });
listView1.Items.Add(newitem2);
ListViewItem newitem3 = new ListViewItem(new String[] { "c2", "3", "4" });
listView1.Items.Add(newitem3);
ListViewItem newitem4 = new ListViewItem(new String[] { "e1", "0", "5" });
listView1.Items.Add(newitem4);
ListViewItem newitem5 = new ListViewItem(new String[] { "d1", "1", "1" });
listView1.Items.Add(newitem5);
}
private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
{
// Determine whether the column is the same as the last column clicked.
if (e.Column != sortColumn)
{
// Set the sort column to the new column.
sortColumn = e.Column;
// Set the sort order to ascending by default.
listView1.Sorting = SortOrder.Ascending;
listView1.Columns[sortColumn].Text = listview_columnTitle[sortColumn] + " ▲";
}
else
{
// Determine what the last sort order was and change it.
if (listView1.Sorting == SortOrder.Ascending)
{
listView1.Sorting = SortOrder.Descending;
listView1.Columns[sortColumn].Text = listview_columnTitle[sortColumn] + " ▼";
}
else
{
listView1.Sorting = SortOrder.Ascending;
listView1.Columns[sortColumn].Text = listview_columnTitle[sortColumn] + " ▲";
}
}
// Call the sort method to manually sort.
listView1.Sort();
// Set the ListViewItemSorter property to a new ListViewItemComparer
// object.
this.listView1.ListViewItemSorter = new MyListViewComparer(e.Column, listView1.Sorting);
}
}
class MyListViewComparer : IComparer
{
private int col;
private SortOrder order;
public MyListViewComparer() {
col=0;
order = SortOrder.Ascending;
}
public MyListViewComparer(int column, SortOrder order)
{
col=column;
this.order = order;
}
public int Compare(object x, object y)
{
int returnVal= -1;
returnVal = String.Compare(((ListViewItem)x).SubItems[col].Text,
((ListViewItem)y).SubItems[col].Text);
// Determine whether the sort order is descending.
if (order == SortOrder.Descending)
// Invert the value returned by String.Compare.
returnVal *= -1;
return returnVal;
}
}
}








반응형

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

C# -- DateTimePicker, DateTime 사용법  (0) 2016.02.25
C# -- ComboBox 사용법  (0) 2016.02.24
C# -- ListView 사용법  (1) 2016.02.20
C# -- ContextMenuStrip vs. ContextMenu  (0) 2016.02.19
C# -- MSSQL 연동  (0) 2016.02.13
Posted by 자유프로그램
,