Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: ListView Добавлено: 21.01.04 10:25  

Автор вопроса:  Maxik
Как отсортировать listview по столбику стандартными средствами?
Что-то слышал про comporer.

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 VladDor



Вопросов: 17
Ответов: 47
 Профиль | | #1 Добавлено: 21.01.04 10:54

Сортировать элементы лучше через коллекции пр-ва имен

System.collections - это классы ArrayList, HashTable т.д.они унаследовали интерфейс IComparer благодаря которому они умеют сравнивать свои элементы. Уних(у большинства )имеетсяметод Sort(параметры сортировки). При добавлении нового элемента в ListView одновременно добавляй их в одну из вышеперечисленных коллекций( у каждой есть метод Add) , затем сортируй их и раскатуй их по ListView. Есть примеры на эту тему.Одно условие -  элементы дожны быть однотипные, иначе могут не понять как их сортировать.

Ответить

Номер ответа: 2
Автор ответа:
 VladDor



Вопросов: 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
Автор ответа:
 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

Нужно протестировать, мне тоже интересно.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам