Перейти к содержанию
Fire Monkey от А до Я
  • 0

Обратный порядок Item у Listbox


Вопрос

Помогите новичку советом!

Делаю проект блокнота. Использую SQLite. На главной странице есть ListBox на который выводятся первые строки каждой записи (собственно заголовки записей):

Screenshot_2018-03-13-14-02-23-192_com.embarcadero.Note10.thumb.jpg.e8785a20b8926dfbb2c974ba3febbd78.jpg

 

При нажатии на Item открывается окно с Memo. Далее запись редактируется, сохраняется и тд...

С БД ListBox синхронизируется через колонку id, который равен ItemIndex.  

ВОПРОС:

Подскажите, как можно сделать, чтобы записи в ListBox отображались в обратном порядке: последние были вверху, первые внизу, как в почтовых сервисах например?

 

 

Изменено пользователем Алексей Алексеев
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
12 минут назад, Алексей Алексеев сказал:

Помогите новичку советом!

Делаю проект блокнота. Использую SQLite. На главной странице есть ListBox на который выводятся первые строки каждой записи (собственно заголовки записей):

Screenshot_2018-03-13-14-02-23-192_com.embarcadero.Note10.thumb.jpg.e8785a20b8926dfbb2c974ba3febbd78.jpg

 

При нажатии на Item открывается окно с Memo. Далее запись редактируется, сохраняется и тд...

С БД ListBox синхронизируется через колонку id, который равен ItemIndex.  

ВОПРОС:

Подскажите, как можно сделать, чтобы записи в ListBox отображались в обратном порядке: последние были вверху, первые внизу, как в почтовых сервисах например?

 

 

Отсортирую данные dataset'a перед заполнением в listbox

Ссылка на комментарий
  • 0

 

35 минут назад, FREEFAR сказал:

Отсортирую данные dataset'a перед заполнением в listbox

То есть, если я правильно понимаю, сортировать таблицу БД, заполняя её уже в обратном порядке? Можно немного по-подробнее, плиииз:). Использую компоненты FDQuery, FDConnection

Изменено пользователем Алексей Алексеев
Ссылка на комментарий
  • 1
7 минут назад, Алексей Алексеев сказал:

 

То есть, если я правильно понимаю, сортировать таблицу БД, заполняя её уже в обратном порядке? Можно немного по-подробнее, плиииз:). Использую компоненты FDQuery, FDConnection

В FDQuery в SELECT`е поставьте в запросе

ORDER BY [you_Field] DESC

DESC Отсортирует в порядке убывания, ASC - наоборот

Изменено пользователем mazayhin
Ссылка на комментарий
  • 0
4 часа назад, mazayhin сказал:

В FDQuery в SELECT`е поставьте в запросе


ORDER BY [you_Field] DESC

DESC Отсортирует в порядке убывания, ASC - наоборот

Спасибо, попробую!

Ссылка на комментарий
  • 0
В 13.03.2018 в 15:23, mazayhin сказал:

В FDQuery в SELECT`е поставьте в запросе


ORDER BY [you_Field] DESC

DESC Отсортирует в порядке убывания, ASC - наоборот

Спасибо, получилось!  Однако, пришлось дорабатывать мой код, так как связь листбоксом и БД идёт в обе стороны: по нажатию на итем открывается в мемо соответствующая строка, есть мультивыделение тд и тп. И если мы фильтруем FDQuery  в обратном порядке, то и Itemindex уже не прировнять к id.  Приходиться вычислять. Конечно, это несложно, но как бы было здорово, будь у Listbox'а опция добавления Itema большего индекса не вниз, а в самый верх .:)

Спасибо всем за ответы!

Изменено пользователем Алексей Алексеев
Ссылка на комментарий
  • 0
13 минут назад, Алексей Алексеев сказал:

Спасибо, получилось!  Однако, пришлось дорабатывать мой код, так как связь листбоксом и БД идёт в обе стороны: по нажатию на итем открывается в мемо соответствующая строка, есть мультивыделение тд и тп. И если мы фильтруем FDQuery  в обратном порядке, то и Itemindex уже не прировнять к id.  Приходиться вычислять. Конечно, это несложно, но как бы было здорово, будь у Listbox'а опция добавления Itema большего индекса не вниз, а в самый верх .:)

Спасибо всем за ответы!

ты можешь добавлять в любое место.

InsertObject(Index: integer, AObject: TFMXObject);

Ссылка на комментарий
  • 0
43 минуты назад, FREEFAR сказал:

ты можешь добавлять в любое место.

InsertObject(Index: integer, AObject: TFMXObject);

Да, но индекс то у верхнего разве не будет 0? А мне надо, чтобы он был последним. Я вроде как где-то вычитал, что после вставки Item на место другого item, он берет его индекс.... Или я ошибаюсь?

Изменено пользователем Алексей Алексеев
Ссылка на комментарий
  • 0
1 час назад, Алексей Алексеев сказал:

Спасибо, получилось!  Однако, пришлось дорабатывать мой код, так как связь листбоксом и БД идёт в обе стороны: по нажатию на итем открывается в мемо соответствующая строка, есть мультивыделение тд и тп. И если мы фильтруем FDQuery  в обратном порядке, то и Itemindex уже не прировнять к id.  Приходиться вычислять. Конечно, это несложно, но как бы было здорово, будь у Listbox'а опция добавления Itema большего индекса не вниз, а в самый верх .:)

Спасибо всем за ответы!

Не знаю, как ведет себя листбокс (у моих только менюшка на 5 пунктов на нем), в чем капризничает, но может стоит данные в свою структуру загнать? А там сам себе хозяин - хочу туда, хочу сюда?

Ссылка на комментарий
  • 0
12 минут назад, mazayhin сказал:

Не знаю, как ведет себя листбокс (у моих только менюшка на 5 пунктов на нем), в чем капризничает, но может стоит данные в свою структуру загнать? А там сам себе хозяин - хочу туда, хочу сюда?

mazayhin, не совсем понял, что значит загнать в свою структуру? Плиз, по-подробнее, если можно.  Учусь тока

Ссылка на комментарий
  • 0
27 минут назад, Алексей Алексеев сказал:

mazayhin, не совсем понял, что значит загнать в свою структуру? Плиз, по-подробнее, если можно.  Учусь тока

Ну я так то тоже юрист со звездами ;) а не профи, тоже учился, учусь, и пока будет время, буду учиться дальше.

Создайте свое представление данных,  да, не знаю, тот же словарь или FDMemTable, в него пишите при добавлении, с него же и отображайте, и вместе с ним в базу кидайте. Как то так.

Данные грузите не через DataBinding?

 

Ссылка на комментарий
  • 0
1 час назад, mazayhin сказал:

Ну я так то тоже юрист со звездами ;) а не профи, тоже учился, учусь, и пока будет время, буду учиться дальше.

Создайте свое представление данных,  да, не знаю, тот же словарь или FDMemTable, в него пишите при добавлении, с него же и отображайте, и вместе с ним в базу кидайте. Как то так.

Данные грузите не через DataBinding?

 

Да спасибо, даже компонентов таких не знал. Надо, попробовать.

"Данные грузите не через DataBinding?"  если вы про LiveBinding, то нет. Хотя пробовал. С первого взгляда всё просто, сразу отображает в листбоксе то, что надо. Но есть трудности, надо разбираться...

PS "Ну я так то тоже юрист со звездами ;) а не профи, тоже учился, учусь, и пока будет время, буду учиться дальше."  - сам инженер, на работе вот познакомился с Delphi 7, и вот сам для себя продолжаю узнавать:D

Изменено пользователем Алексей Алексеев
Ссылка на комментарий
  • 0
1 час назад, Алексей Алексеев сказал:

если вы про LiveBinding, то нет

И правильно, не используйте этот LiveBinding. Мне кажется использование LiveBinding это плохое решение. Я как-то решил попробовать это "чудо" средство и наткнулся на многие грабли. Например, у меня приложение категорически отказывалось запускаться при закрытом DataSet. LiveBinding выкидывал exception с такого рода сообщением. Зачем? Ведь мне и нужно открывать DataSet при необходимости, мне сначала эти данные не нужны. Просто не нужно ничего связывать в таком случает а не кидаться exception'ами. При закрытии DataSet тоже какие-то ошибки кидал. В общем все проблемы решились просто убрав этот LiveBinding и написанием своей функции отображения данных по старинке.

 

В 3/13/2018 в 14:26, Алексей Алексеев сказал:

С БД ListBox синхронизируется через колонку id, который равен ItemIndex.

Вот это совсем нехорошо. Так нельзя делать. А если вы удалите какие-то записи и id станут не по порядку? Будете каждый раз редактировать id в БД? Можно для этого использовать свойство Tag, которое есть у всех компонентов вот как раз для подобных целей.

Ссылка на комментарий
  • 0
3 минуты назад, Pulsarius сказал:

И правильно, не используйте этот LiveBinding. Мне кажется использование LiveBinding это плохое решение. Я как-то решил попробовать это "чудо" средство и наткнулся на многие грабли. Например, у меня приложение категорически отказывалось запускаться при закрытом DataSet. LiveBinding выкидывал exception с такого рода сообщением. Зачем? Ведь мне и нужно открывать DataSet при необходимости, мне сначала эти данные не нужны. Просто не нужно ничего связывать в таком случает а не кидаться exception'ами. При закрытии DataSet тоже какие-то ошибки кидал. В общем все проблемы решились просто убрав этот LiveBinding и написанием своей функции отображения данных по старинке.

 

Вот это совсем нехорошо. Так нельзя делать. А если вы удалите какие-то записи и id станут не по порядку? Будете каждый раз редактировать id в БД? Можно для этого использовать свойство Tag, которое есть у всех компонентов вот как раз для подобных целей.

Ну, не совсем точно написал. У меня есть ещё колонка i, которая при удалении заново перебирается и ей присваиваются значения по порядку. Именно по этой колонке открываю для редактирования запись в мемо по клику по лист бокс. А вот в лист бокс загружаю по id. Согласен, мудрено, вот и ищу пути для более простого кода. Вначале я все синхронизировал по i, но когда появилась потребность в обратном порядке, тогда возникли проблемы с i. Пришлось ещё задействовать id

Кстати, про LiveBinding. Я просто совсем немного в нем полазил и отказался по несколько не связанной с его глючностью причиной, которая вроде несколько напоминает то, что написали вы. Когда работаю с БД, я проверяю что в ней с помощью браузера БД. Так вот, когда я установил связь между Listvox и fdquery, то уже не мог открыть базу браузером. Что было для меня очень критично. :)

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...