• 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 отображались в обратном порядке: последние были вверху, первые внизу, как в почтовых сервисах например?

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 ответов на этот вопрос

  • 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, то уже не мог открыть базу браузером. Что было для меня очень критично. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От YurMak
      Здравствуйте, уважаемые!
      Пробую писать некое подобие файлового менеджера.
      Для вывода папок и файлов использую  ListBox .
      Так вот: при обработке события ListBoxItemClick (нажатие  на строку) происходит переход по пути, казанному с этой строке, содержимое этой папки отображается, но строки в ней не нажимаютмя, не реагируют на событие нажатия.
      Если проще - строки на первой станице ListBox реагируют на нажатие, а на второй - нет.
      Что я делаю не так?
      {Клик по Item'у, вперёд} procedure TForm1.FoldersListBoxItemClick(const Sender: TCustomListBox; const Item: TListBoxItem); var ExtFile: string; begin // Сохраняем выбранный путь CurrentPath := CurrentPath+Item.ItemData.Text; //Текущая директория if Item.TagString = 'folder' then //Проверяем, если это папка begin if TDirectory.Exists(CurrentPath) then //Проверяем, если папка существует begin Label1.Text:= 'Нажата строка № '+ inttostr(Item.Index); //Контроль!!! FillFolderListBox(CurrentPath, True); //Процедура заполнения ListBox`а папками и файлами end else if Item.TagString = 'file' then //Иначе - файл begin Label1.Text:='Отправляем файл "'+Item.ItemData.Text+'" на плеер'; //Готовим на исподнение end; end; end; Вот этот код срабатывает один (первый) раз.
       
      Прошу помощи, советов, вариантов.
    • От chaplin.u@gmail.com
      во всех примерах по ComboBox есть только добавить AddItem  а как удалить не нужный Item ?
    • От chaplin.u@gmail.com
      У Мемо есть фича когда нажимаешь (тап по экрану) вылезает клавиатура для редактирования текста.
      Можно ли сделать такое-же с ListBox ? Тапаешь по итему и клавой исправляешь текст.
    • От chaplin.u@gmail.com
      Есть ли возможность в редакторе или програмно исправлять Index у ListBox1->Item ?  
       
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу