リストビューの列をクリックするとソートされます。 この場合、私は、コンストラクタで3列ありますlistView列に複数の項目が含まれているかどうかを確認する方法?
ListViewCostumControl.lvnf.View = View.Details;
ListViewCostumControl.lvnf.SuspendLayout();
ListViewCostumControl.lvnf.LabelEdit = true;
ListViewCostumControl.lvnf.Columns.Add("From", 100, HorizontalAlignment.Left);
ListViewCostumControl.lvnf.Columns.Add("Subject", 200);
ListViewCostumControl.lvnf.Columns.Add("Date", 300);
ListViewCostumControl.lvnf.Sorting = SortOrder.None;
ListViewCostumControl.lvnf.SelectedIndexChanged += lvnf_SelectedIndexChanged;
ListViewCostumControl.lvnf.Click += lvnf_Click;
ListViewCostumControl.lvnf.MouseDown += lvnf_MouseDown;
ListViewCostumControl.lvnf.ColumnClick += lvnf_ColumnClick;
「件名」 「日」の「From」
私はソートする列の1の上にクリックしたときに私はしたいがそれは列の名前に依存するFrom、Subject、Date最初の2つFromとSubject私はどのような並べ替えを行うことができるのかよく分かりませんが、Date列をどのように並べ替えることができますか?
void lvnf_ColumnClick(object sender, ColumnClickEventArgs e)
{
if (e.Column.
ListViewCostumControl.lvnf.ListViewItemSorter = new ListViewItemComparer(e.Column);
}
私はとにかくソートする理由がないではない場合、列はそれらのいずれか1つの項目、より多くを含んでいる場合(e.Column。 は、私が最初にチェックしようとした場合には作り始めた。
第二のI ?「行ならば分からない:
ListViewCostumControl.lvnf.ListViewItemSorter = new ListViewItemComparer(e.Column);
は、私が今、試さ何か良い
ですクリックイベントにこのコードです:
void lvnf_ColumnClick(object sender, ColumnClickEventArgs e)
{
ListViewSorter Sorter = new ListViewSorter();
ListViewCostumControl.lvnf.ListViewItemSorter = Sorter;
if (!(ListViewCostumControl.lvnf.ListViewItemSorter is ListViewSorter))
return;
Sorter = (ListViewSorter)ListViewCostumControl.lvnf.ListViewItemSorter;
if (Sorter.LastSort == e.Column)
{
if (ListViewCostumControl.lvnf.Sorting == SortOrder.Ascending)
ListViewCostumControl.lvnf.Sorting = SortOrder.Descending;
else
ListViewCostumControl.lvnf.Sorting = SortOrder.Ascending;
}
else
{
ListViewCostumControl.lvnf.Sorting = SortOrder.Descending;
}
Sorter.ByColumn = e.Column;
ListViewCostumControl.lvnf.Sort();
}
とクラスListViewSorter
public class ListViewSorter : System.Collections.IComparer
{
public int Compare(object o1, object o2)
{
if (!(o1 is ListViewItem))
return (0);
if (!(o2 is ListViewItem))
return (0);
ListViewItem lvi1 = (ListViewItem)o2;
string str1 = lvi1.SubItems[ByColumn].Text;
ListViewItem lvi2 = (ListViewItem)o1;
string str2 = lvi2.SubItems[ByColumn].Text;
int result;
if (lvi1.ListView.Sorting == SortOrder.Ascending)
result = String.Compare(str1, str2);
else
result = String.Compare(str2, str1);
LastSort = ByColumn;
return (result);
}
public int ByColumn
{
get { return Column; }
set { Column = value; }
}
int Column = 0;
public int LastSort
{
get { return LastColumn; }
set { LastColumn = value; }
}
int LastColumn = 0;
}
問題は、今私はそれをソートするために、最初の列にそれぞれの時間をクリックすることができますが、他の二つの列に、私は一度だけの時間をクリックすることができます。私のロジックでは、私はそれを並べ替えるすべての時間、各列をクリックする必要がありますか?たとえば、Dateカラムでは、一度クリックしてからもう一度やり直すと最も古い日付に並べ替えるべきですが、最初に他のカラムをクリックした場合にのみ、日付カラムをクリックすることができます。
わかりません。なぜあなたは特別なケースを作りますか?多くのアイテムや少数のアイテムでソートを行う場合、どうして気にしますか?そして、あなたは私のことを大事にしてください。タグに 'ListView'と' Sort'を追加します。ありがとうございました! – TaW