Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
4 / 4 / 4
Регистрация: 03.01.2015
Сообщений: 449

Сортировка listView по клику на столбце

21.08.2016, 14:29. Показов 1553. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Помогите, пожалуйста.
Делала сортировку listView1 по клику на столбце. Нашла пример(https://msdn.microsoft.com/ru-... s.90).aspx) Сделала его, но в программе выдает ошибку(указала в коде). Помогите пожалуйста!

Form3.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Collections;
 
namespace WindowsFormsApplication1
{
    public partial class Form3 : Form
    {
       public Form3(Form1 pF, List<Form1.Acc_T> acc_t)
        {
            InitializeComponent();
            mainnn(pF, acc_t);
        }
 
       public class SortWrapper
       {
           internal ListViewItem sortItem;
           internal int sortColumn;
 
 
           public SortWrapper(ListViewItem Item, int iColumn)
           {
               sortItem = Item;
               sortColumn = iColumn;
           }
 
           public string Text
           {
               get
               {
                   return sortItem.SubItems[sortColumn].Text;
               }
           }
 
           public class SortComparer : IComparer
           {
               bool ascending;
 
              public SortComparer(bool asc)
               {
                   this.ascending = asc;
               }
               public int Compare(object x, object y)
               {
                   SortWrapper xItem = (SortWrapper)x;
                   SortWrapper yItem = (SortWrapper)y;
 
                   string xText = xItem.sortItem.SubItems[xItem.sortColumn].Text;
                   string yText = yItem.sortItem.SubItems[yItem.sortColumn].Text;
                   return xText.CompareTo(yText) * (this.ascending ? 1 : -1);
               }
           }
       }
 
       public class ColHeader : ColumnHeader
       {
           public bool ascending;
           public ColHeader(string text, int width, HorizontalAlignment align, bool asc)
           {
               this.Text = text;
               this.Width = width;
               this.TextAlign = align;
               this.ascending = asc;
           }
       }
 
 
       private void mainnn(Form1 pF, List<Form1.Acc_T> acc_t)
       {
           listView1.Columns.Add(new ColHeader("Название", 102, HorizontalAlignment.Left, true));
           listView1.Columns.Add(new ColHeader("Размер", 72, HorizontalAlignment.Center, true));
           listView1.Columns.Add(new ColHeader("Симметрия", 151, HorizontalAlignment.Center, true));
           listView1.Columns.Add(new ColHeader("Класс", 119, HorizontalAlignment.Center, true));
 
           int i=1;
           foreach (var AT in acc_t)
           {
               var listItem = listView1.Items.Add("Строка" + i);
               listItem.Text = AT.name;
               listItem.SubItems.Add(pF.Ras(AT.size));
               listItem.SubItems.Add(AT.sim);
               listItem.SubItems.Add(pF.Cla(AT.size));
               i=i+1;
               
           }
       }
 
       private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
       {
           ColHeader clickedCol = (ColHeader)this.listView1.Columns[e.Column]; <---------Additional information: Не удалось привести тип объекта "System.Windows.Forms.ColumnHeader" к типу "ColHeader".
 
           clickedCol.ascending = !clickedCol.ascending;
 
           int numItems = this.listView1.Items.Count;
 
           this.listView1.BeginUpdate();
 
           ArrayList SortArray = new ArrayList();
           for (int i = 0; i < numItems; i++)
           {
               SortArray.Add(new SortWrapper(this.listView1.Items[i], e.Column));
           }
 
           SortArray.Sort(0, SortArray.Count, new SortWrapper.SortComparer(clickedCol.ascending));
 
           this.listView1.Items.Clear();
           for (int i = 0; i < numItems; i++)
               this.listView1.Items.Add(((SortWrapper)SortArray[i]).sortItem);
           this.listView1.EndUpdate();
 
       }
 
       private void listView1_Click(object sender, EventArgs e)
       {
 
       }
 
    }
}
Часть кода из Form3.Designer.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 
            // listView1
            // 
            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
            this.Название,
            this.Размер,
            this.Симметрия,
            this.Класс});
            this.listView1.GridLines = true;
            this.listView1.Location = new System.Drawing.Point(12, 12);
            this.listView1.Name = "listView1";
            this.listView1.Size = new System.Drawing.Size(449, 334);
            this.listView1.TabIndex = 0;
            this.listView1.UseCompatibleStateImageBehavior = false;
            this.listView1.View = System.Windows.Forms.View.Details;
            this.listView1.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView1_ColumnClick);
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.08.2016, 14:29
Ответы с готовыми решениями:

ListView, сортировка по клику на заголовке
Здравствуйте... Есть LIstView, произвожу сортировку по клику на заголовке, нужно что бы колонка по которой производится сортировка...

Сортировка в любом столбце (элемент ListView)
Как в ListView сделать в любом столбце в заголовке таблицы значки сортировки? И как их обрабатывать? Заранее спасибо.

Открыть файл по клику из ListView
Добрый день. Имеется ListView с отображением каталогов и файлов. Пользователь ищет нужный ему файл(например *htm), кликает по нему, и файл...

2
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
21.08.2016, 14:43
Цитата Сообщение от Maray Посмотреть сообщение
Часть кода из Form3.Designer.cs
Ну так проблема именно здесь. Ты добавляешь столбцы в дизайнере, ну и дизайнер, соответственно, заточен под работу с ColumnHeader и именно их и добавляет и они, конечно же, не могут быть приведены к типу ColHeader, поскольку не являются его экземплярами. В примере же добавляются ColHeader и делается это в коде, а не с помощью дизайнера.
1
4 / 4 / 4
Регистрация: 03.01.2015
Сообщений: 449
21.08.2016, 15:49  [ТС]
Огромное Вам спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.08.2016, 15:49
Помогаю со студенческими работами здесь

Сортировка listView. Как узнать длину listview?
Есть listview состоящий из чисел(только числа в string). Как их сортировать по возрастанию? (т.е. так, чтобы на верхнем месте в listview...

Редактирование элементов ListView по двойному клику
Подскажите, пожалуйста, как в Listview сделать так, чтобы пользователь при двойном нажатии(например) по ячейке мог вводить значение или...

Передача строки ListView по TextBox по клику
Здравствуйте! Мне необходимо сделать интерфейс к базе таким образом чтобы при выборе строки из ListView(инф из базы) содержимое...

Отключить перемещение Itemindex по клику в Listview
Всем Привет...и Собственно нужно пояснение как можно реализовать...(заголовок темы)

По клику на ListView в Label отоборажается информация из SubItems
Здравствуйте! По клику на ListView в лабелах отоборажается информация из SubItems. Всё в принципе работает правильно, но мне кажется что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru