Как проверить, содержит ли столбец listView более одного элемента?

Я хочу сделать это, когда я нажимаю на столбец listView, он будет сортировать его.
В этом случае у меня есть 3 столбца в конструкторе:

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;

«От»
«Предмет»
«Дата»

Поэтому я хочу, когда я нажимаю на верхнюю часть одного из столбцов, чтобы отсортировать его в зависимости от имени столбца,темы,даты первых двух от и темы, я не уверен, какая сортировка может быть сделана с ним, но как я могу отсортировать столбец даты ?

void lvnf_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            if (e.Column.
                ListViewCostumControl.lvnf.ListViewItemSorter = new ListViewItemComparer(e.Column);
        }

Я начал делать if (e.Колонка.
Я попытался сначала проверить, содержит ли столбец какой-либо из них более одного элемента, если нет никакой причины сортировать в любом случае.

Во-вторых, я не уверен, если линия:

ListViewCostumControl.lvnf.ListViewItemSorter = new ListViewItemComparer(e.Column);

Есть ли хорошие ?

Теперь я попробовал этот код в событии click:

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;
        }

Проблема теперь в том, что я могу нажать на первый столбец каждый раз, чтобы отсортировать его, но на двух других столбцах я могу нажать только один раз каждый раз. В моей логике я должен быть в состоянии нажать на каждый столбец все время, чтобы отсортировать его нет ? Например, в столбце Дата, если я щелкнул один раз, а затем еще раз, он должен отсортировать его по новейшим до самых старых дат, но я могу нажать на столбец дата, только если сначала я нажал на другой столбец.

1 ответ

  1. Эта строка кода должна работать нормально. Что касается проверки содержимого столбца, то в этом нет необходимости. Поскольку у вас есть 3 столбца и, предположительно, всегда будет, сортировка по столбцу без данных по-прежнему будет допустимой опцией для сортировки. Хотя он просто сортировал бы его к своему настоящему состоянию. Если столбец существует, он уже имеет некоторую форму данных, связанных с использованием списка, даже если эти данные содержат значение null на данный момент.

    Если у вас есть столбцы, которые используются, которые продолжают не иметь данных, я бы предложил сделать динамическое представление списка, где вы создаете столбцы, когда они необходимы, чтобы увидеть, если это может лучше соответствовать вашей программе.

    **ListViewCostumControl написан с ошибкой