ピクチャ - >http://img502.imageshack.us/img502/511/87162943.pngListViewでソートする方法は?
クリックイベントが各列(質問、回答、タイプ)でアルファベット順に表示されると、どのように並べ替えますか?
ピクチャ - >http://img502.imageshack.us/img502/511/87162943.pngListViewでソートする方法は?
クリックイベントが各列(質問、回答、タイプ)でアルファベット順に表示されると、どのように並べ替えますか?
リストボックスの代わりにDataGridを使用すると、簡単になります。 とにかく、自分で実装することもできます。ここ は私がリストビューに一度使用何かからの例です:
はColumnClickイベントを実装します。
private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
{
// Determine if clicked column is already the column that is being sorted.
if (e.Column == _lvwItemComparer.SortColumn)
{
// Reverse the current sort direction for this column.
if (_lvwItemComparer.Order == SortOrder.Ascending)
{
_lvwItemComparer.Order = SortOrder.Descending;
}
else
{
_lvwItemComparer.Order = SortOrder.Ascending;
}
}
else
{
// Set the column number that is to be sorted; default to ascending.
_lvwItemComparer.SortColumn = e.Column;
_lvwItemComparer.Order = SortOrder.Ascending;
}
// Perform the sort with these new sort options.
listView1.Sort();
}
このmathodは、比較のために、このクラスを使用しています、あなたはそれをコピーし、それを使用することができます。
public class ListViewItemComparer : IComparer
{
// Specifies the column to be sorted
private int ColumnToSort;
// Specifies the order in which to sort (i.e. 'Ascending').
private SortOrder OrderOfSort;
// Case insensitive comparer object
private CaseInsensitiveComparer ObjectCompare;
// Class constructor, initializes various elements
public ListViewItemComparer()
{
// Initialize the column to '0'
ColumnToSort = 0;
// Initialize the sort order to 'none'
OrderOfSort = SortOrder.None;
// Initialize the CaseInsensitiveComparer object
ObjectCompare = new CaseInsensitiveComparer();
}
// This method is inherited from the IComparer interface.
// It compares the two objects passed using a case
// insensitive comparison.
//
// x: First object to be compared
// y: Second object to be compared
//
// The result of the comparison. "0" if equal,
// negative if 'x' is less than 'y' and
// positive if 'x' is greater than 'y'
public int Compare(object x, object y)
{
int compareResult;
ListViewItem listviewX, listviewY;
// Cast the objects to be compared to ListViewItem objects
listviewX = (ListViewItem)x;
listviewY = (ListViewItem)y;
// Determine whether the type being compared is a date type.
try
{
// Parse the two objects passed as a parameter as a DateTime.
DateTime firstDate = DateTime.Parse(listviewX.SubItems[ColumnToSort].Text);
DateTime secondDate = DateTime.Parse(listviewY.SubItems[ColumnToSort].Text);
// Compare the two dates.
compareResult = DateTime.Compare(firstDate, secondDate);
}
// If neither compared object has a valid date format,
// perform a Case Insensitive Sort
catch
{
try
{
int num1 = int.Parse(listviewX.SubItems[ColumnToSort].Text);
int num2 = int.Parse(listviewY.SubItems[ColumnToSort].Text);
// Compare the two dates.
compareResult = num1.CompareTo(num2);
}
catch
{
// Case Insensitive Compare
compareResult = ObjectCompare.Compare(
listviewX.SubItems[ColumnToSort].Text,
listviewY.SubItems[ColumnToSort].Text
);
}
}
// Calculate correct return value based on object comparison
if (OrderOfSort == SortOrder.Ascending)
{
// Ascending sort is selected, return normal result of compare operation
return compareResult;
}
else if (OrderOfSort == SortOrder.Descending)
{
// Descending sort is selected, return negative result of compare operation
return (-compareResult);
}
else
{
// Return '0' to indicate they are equal
return 0;
}
}
// Gets or sets the number of the column to which to
// apply the sorting operation (Defaults to '0').
public int SortColumn
{
set
{
ColumnToSort = value;
}
get
{
return ColumnToSort;
}
}
// Gets or sets the order of sorting to apply
// (for example, 'Ascending' or 'Descending').
public SortOrder Order
{
set
{
OrderOfSort = value;
}
get
{
return OrderOfSort;
}
}
}
this KB articleに記載されているように、ListViewItemSorter
プロパティを割り当てます。
それはその画像内のListBoxですか? – Joey
間違った、ListView –