Сортировка в ListView

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сортировка в ListView

Сообщение SHURUP » 27.09.2004 (Пн) 10:20

Очередной вопрос по ListView!
Как в этом контроле отсортировать колонку с численной информацией?
Проблема в том, что при использовании sortkey, данные сортируются по Asc-коду значений, т.е. 2 будет ити после 10
Заранее спасибо!
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 27.09.2004 (Пн) 10:40

есть два варианта:
1 - ручками
2 - заполнять в определенном формате, в данном случае не 2, а 02. Что, на мой взгляд, проще.
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 27.09.2004 (Пн) 10:53

Практика показала, что второй вариант проще. Он же и более читабелен, как ни странно...

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 27.09.2004 (Пн) 10:57

Спасибо!
kif писал(а):2 - заполнять в определенном формате, в данном случае не 2, а 02. Что, на мой взгляд, проще.

Мне это тоже не слишком подходит, так как диапазон чисел - long, и выглядеть это будет неприятно! Но я могу создавать невидимую колонку с числами типа 000001, 000002 и т.д.
Тогда 2 встречных вопроса
:?: как перевести 1 в "000001", я так понимаю, что-то типа "Format(value, ????)"
:?: как запретить изменение размера колонки?
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 27.09.2004 (Пн) 11:04

Сортировку в ListView делать можно как угодно (хоть по нескольким колонкам одновременно) - с помощью API.

Попробуй скачать отсюда:

http://www.devcity.net/page.asp?p=afl

делал давно, но сортировка там должна быть - в проекте примера.

Впрочем, вот прямая ссылка для скачивания:

http://www.vbcity.com/download/AFileLib.zip
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 27.09.2004 (Пн) 11:14

2 Andrey Fedorov:
Большое спасибо! Пример большой, но попробую разобраться! Уже много интересного нашел!
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 27.09.2004 (Пн) 11:27

Я делаю так -

Код: Выделить всё

lIntSortCol = <по какой колонке сортируем>
' форматируем поля для сортировки
    For Each oListItem In lsvMainLib.ListItems
      If Trim(oListItem.ListSubItems(lIntSortCol).Text) = "" Then  _
          oListItem.ListSubItems(lIntSortCol).Text = "-"
      oListItem.ListSubItems(lIntSortCol).Text =  _
          Format(oListItem.ListSubItems(lIntSortCol).Text, "000000000000")
    Next

' здесь сортировка

    ' возвращаем исходные значения
    For Each oListItem In lsvMainLib.ListItems
      If IsNumeric(oListItem.ListSubItems(lIntSortCol).Text) Then
        oListItem.ListSubItems(lIntSortCol).Text = _
           CLng(oListItem.ListSubItems(lIntSortCol).Text)
      Else
        If oListItem.ListSubItems(lIntSortCol).Text = "-" Then _
           oListItem.ListSubItems(lIntSortCol).Text = ""
      End If
    Next

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.09.2004 (Пн) 22:28

SHURUP писал(а): :?: как перевести 1 в "000001", я так понимаю, что-то типа "Format(value, ????)"

На всякий случай:
Код: Выделить всё
Format(Value, "000000")
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 4

    TopList