Страница: 1 |
Вопрос: ListView | Добавлено: 21.01.04 10:25 |
Автор вопроса: ![]() |
Как отсортировать listview по столбику стандартными средствами? Что-то слышал про comporer. |
Ответы | Всего ответов: 5 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 17 Ответов: 47 |
Профиль | Цитата | #1 | Добавлено: 21.01.04 10:54 |
Сортировать элементы лучше через коллекции пр-ва имен System.collections - это классы ArrayList, HashTable т.д.они унаследовали интерфейс IComparer благодаря которому они умеют сравнивать свои элементы. Уних(у большинства )имеетсяметод Sort(параметры сортировки). При добавлении нового элемента в ListView одновременно добавляй их в одну из вышеперечисленных коллекций( у каждой есть метод Add) , затем сортируй их и раскатуй их по ListView. Есть примеры на эту тему.Одно условие - элементы дожны быть однотипные, иначе могут не понять как их сортировать. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 17 Ответов: 47 |
Профиль | Цитата | #2 | Добавлено: 21.01.04 12:53 |
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 ) и вперед. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() Вопросов: 58 Ответов: 201 |
Профиль | Цитата | #3 | Добавлено: 21.01.04 16:56 |
Я так и делал. Думал, может, есть способ легче. |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() Вопросов: 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 17 Ответов: 47 |
Профиль | Цитата | #5 | Добавлено: 23.01.04 16:42 |
Нужно протестировать, мне тоже интересно. |
Страница: 1 |
|