Список с множественным выбором, привязанный к базе данных в Delphi 6

Я использую Delphi 6, и мне нужен список с привязкой к базе данных с множественным выбором. Я нашел три типа списков: TListBox, TDBListBox и TDBLookupListBox.

Насколько я понимаю, TListbox не привязан к базе данных. TDBListBox и TDBLookupListBox нельзя выбрать несколько раз.

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


person Blue    schedule 28.10.2008    source источник


Ответы (7)


Проблема с компонентами привязки данных заключается в том, что они полагаются на источник данных, а источник данных имеет только один курсор. Наверное, поэтому.

Кстати, нужно ли менять данные? В противном случае вы можете заполнить обычный список из набора данных. Или даже используйте невидимый список данных и скопируйте содержимое в обычный список.

person Toon Krijthe    schedule 28.10.2008

Насколько я знаю, нет.
Стандартом является то, что вы предлагаете список значений, в котором 1 представляет текущую запись.
Если у вас нет поля с несколькими значениями (вопреки рекомендациям), я не вижу как можно было сделать множественный выбор...

Или то, что вам может понадобиться, на самом деле является подтаблицей?

person Francesca    schedule 28.10.2008
comment
Я хочу создать фильтр для таблицы, и список является одним из критериев фильтра. Я хочу заполнить список таблицей из базы данных. - person Blue; 28.10.2008

DevExpress TcxDBListBox поддерживает множественный выбор. Я использую их раскрывающийся список с множественным выбором, привязанный к базе данных, это приятно.

Компоненты имеют методы, которые вы можете реализовать для преобразования в ваш список и из него; EditValueToStates и StatesToEditValue. Хотя данные, которые я храню, не нормализованы (я храню список номеров версий, разделенных точкой с запятой), я создал для поля индекс полнотекстового поиска с точкой с запятой в качестве разделителя, и теперь я все еще могу выполнять оптимизированный поиск. на том поле.

person Jeremy Mullin    schedule 28.10.2008

Вы можете создать свой собственный настраиваемый компонент списка, который наследуется от TCustomListBox, и добавить свойство источника данных для вашего списка, а также другое свойство, такое как TStrings, которое будет использоваться в качестве контейнера для хранения выбранных значений. Затем вы можете опубликовать изменения в своей базе данных, нажав кнопку.

person user30586    schedule 31.10.2008

Если вы повозитесь с некоторыми параметрами TDBGrid и ограничите отображаемые столбцы, вы можете сделать что-то очень похожее на список. Попробуйте установить для свойства Options значение [dgTitles, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgCancelOnExit, dgMultiSelect] и работайте оттуда.

person Mason Wheeler    schedule 20.12.2008

В TDbLookupListBox у вас есть возможность привязать к данным две разные вещи; во-первых, вы можете привязать список к набору данных (ListSource/ListField/KeyField), во-вторых, вы можете привязать выбранный элемент к полю в другом наборе данных (DataSource, DataField). Нет ничего концептуально неправильного в желании привязать список элементов к набору данных, а затем вручную управлять несколькими выборками, однако я не думаю, что это возможно с текущей реализацией без создания подклассов и включения необходимых стилей управления.

person Jozz    schedule 28.10.2008

Основываясь на вашем комментарии Франсуа, я бы использовал обычный TListbox и написал код для вставки всех отдельных значений в список, а затем самостоятельно обрабатывал значения множественного выбора. Решение Джереми также работает, и DevExpress Express Quantum Grid имеет хорошую систему фильтрации, которая может даже спасти вас от некоторых других программ.

person skamradt    schedule 28.10.2008