Страница: 1 |
Сортировать элементы лучше через коллекции пр-ва имен System.collections - это классы ArrayList, HashTable т.д.они унаследовали интерфейс IComparer благодаря которому они умеют сравнивать свои элементы. Уних(у большинства )имеетсяметод Sort(параметры сортировки). При добавлении нового элемента в ListView одновременно добавляй их в одну из вышеперечисленных коллекций( у каждой есть метод Add) , затем сортируй их и раскатуй их по ListView. Есть примеры на эту тему.Одно условие - элементы дожны быть однотипные, иначе могут не понять как их сортировать. Maxik - дополнение. Можно создать пользовательскую сортировку разнотипных элементов коллекций,но тут задача усложняется, для ентого надо: 1.Создать пользовательскую структуру: Structure Maxik Dim My_Name as String Dim Birth_Day as Date Dim Maxik_Emale as String End Structure 2.Создать класс и реализовать в нем функцию(по каждому типу- своя функция) которая умеет сравнивть твои элементы: Class MaxikCmparer: Imlepemets Icomparer Public Function Compare_Maxik(ByVal ... as Object, ByVal...as Object)_ As Integer Implements Icomparer.Compare_Maxik .......код End Function End Class Имплементация в класс интерфейса IComparer учит твой класс сравнивать элементы с помощь этих функций. А затем организовуешь поиск. Dim MyCollection as New ArrayList() ' Или другая кол- я MyCollection.Sort(New MaxikCmparer ) и вперед. Нужно протестировать, мне тоже интересно. Страница: 1 |
Вопрос: ListView
Добавлено: 21.01.04 10:25
Автор вопроса: Maxik
Как отсортировать listview по столбику стандартными средствами?
Что-то слышал про comporer.
Ответы
Всего ответов: 5
Номер ответа: 1
Автор ответа:
VladDor
Вопросов: 17
Ответов: 47
Профиль | | #1
Добавлено: 21.01.04 10:54
Номер ответа: 2
Автор ответа:
VladDor
Вопросов: 17
Ответов: 47
Профиль | | #2
Добавлено: 21.01.04 12:53
Номер ответа: 3
Автор ответа:
Maxik
Вопросов: 58
Ответов: 201
Профиль | | #3
Добавлено: 21.01.04 16:56
Я так и делал. Думал, может, есть способ легче.
Номер ответа: 4
Автор ответа:
Maxik
Вопросов: 58
Ответов: 201
Профиль | | #4
Добавлено: 23.01.04 15:10
Кажется, это работает... Хотя толком не испытал.
Sub SortLV(ByVal LV As ListView, ByVal ColInd As Integer, ByVal UD As
Boolean)
Dim lvi(LV.Items.Count - 1) As ListViewItem
LV.Items.CopyTo(lvi, 0)
Dim lviTemp As ListViewItem
Dim ind, IndT, ind2 As Integer
For ind = 0 To lvi.GetUpperBound(0) - 1
lviTemp = lvi(ind)
IndT = ind
For ind2 = ind + 1 To lvi.GetUpperBound(0)
If lvi(ind2).SubItems(ColInd).Text <
lviTemp.SubItems(ColInd).Text = UD Then
lviTemp = lvi(ind2)
IndT = ind2
End If
Next
lvi(IndT) = lvi(ind)
lvi(ind) = lviTemp
Next
LV.Items.Clear()
LV.Items.AddRange(lvi)
End Sub
Номер ответа: 5
Автор ответа:
VladDor
Вопросов: 17
Ответов: 47
Профиль | | #5
Добавлено: 23.01.04 16:42