Список множественного выбора, привязанный к базе данных в Delphi 6 - PullRequest
4 голосов
/ 28 октября 2008

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

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

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

Ответы [ 7 ]

3 голосов
/ 28 октября 2008

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

Или то, что вы могли бы хотеть на самом деле под-таблицы?

3 голосов
/ 28 октября 2008

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

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

1 голос
/ 20 декабря 2008

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

1 голос
/ 31 октября 2008

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

1 голос
/ 29 октября 2008

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

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

0 голосов
/ 29 октября 2008

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

0 голосов
/ 28 октября 2008

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

...