Delphi 6中绑定到数据库的多选列表框

Delphi 6中绑定到数据库的多选列表框,delphi,data-binding,listbox,Delphi,Data Binding,Listbox,我使用的是Delphi6,我想要一个带有multiselect的数据库绑定列表框。我找到了三种类型的列表框:TListBox、TDBListBox和TDBLookupListBox 据我所知,TListbox未绑定到数据库TDBListBox和TDBLookupListBox不能多选 有没有办法将多选列表框绑定到数据库?数据绑定组件的问题是它们依赖于数据源,而数据源只有一个游标。这可能就是原因 顺便问一下,您需要更改数据吗?否则,您可以从数据集中填充普通列表框。或者甚至使用一个不可见的数据列表框

我使用的是Delphi6,我想要一个带有multiselect的数据库绑定列表框。我找到了三种类型的列表框:
TListBox
TDBListBox
TDBLookupListBox

据我所知,
TListbox
未绑定到数据库<代码>TDBListBox和
TDBLookupListBox
不能多选


有没有办法将多选列表框绑定到数据库?

数据绑定组件的问题是它们依赖于数据源,而数据源只有一个游标。这可能就是原因

顺便问一下,您需要更改数据吗?否则,您可以从数据集中填充普通列表框。或者甚至使用一个不可见的数据列表框,将内容复制到一个普通的列表框。

据我所知不是这样。
标准是,您在列表中提供一组值,其中1表示当前记录。
除非您有一个多值字段(与最佳实践相反),否则我看不出您如何能够进行多值选择


或者您可能想要的实际上是一个子表?

在TDBlookupList框中,您可以选择将两个不同的内容绑定到数据;首先可以将列表绑定到一个数据集(ListSource/ListField/KeyField),其次可以将所选项绑定到另一个数据集中的字段(DataSource,DataField)。想要将项目列表绑定到数据集,然后手动管理多个选择,从概念上讲没有什么错,但是我认为当前的实现不可能不子类化和启用所需的控件样式。

DevExpress TcxDBListBox支持多选。我使用他们的多选下拉复选框绑定到数据库,这很好


这些组件具有可实现的方法,用于在列表中进行转换;EditValueToStates和StatesToEditValue。虽然我存储的数据没有规范化(我存储一个以分号分隔的版本号列表),但我在字段上创建了一个全文搜索索引,以分号作为分隔符,现在我仍然可以在该字段上执行优化搜索。

根据您对François的评论,我将使用一个普通的TListbox并编写代码将所有不同的值插入列表,然后自己处理多选值。Jeremy的解决方案也很有效,并且有一个很好的过滤系统,它甚至可以为您节省一些其他编程。

您可以创建自己的自定义listbox组件,该组件从TCustomListBox派生,并为列表添加一个Datasource属性,以及另一个属性,如Tstring,用作保存选定值的容器。然后,您可以通过单击按钮将更改发布到数据库。

如果您摆弄TDBGrid的某些选项并限制它显示的列,您可以制作一个看起来非常像列表框的东西。尝试将“选项”属性设置为[dgTitles、dgTabs、dgRowSelect、dgAlwaysShowSelection、dgCancelOnExit、dgMultiSelect],然后从那里开始工作。

我想为表创建一个筛选器,列表框是筛选条件之一。我想用数据库中的表填充列表框。