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

StackOverflow https://stackoverflow.com/questions/244536

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top