我正在使用Delphi 6,我想要一个带有多选的数据库绑定列表框。我找到了三种类型的列表框:TListBox
,TDBListBox
和TDBLookupListBox
。
据我所知,TListbox
未绑定到数据库。 <{1}}和TDBListBox
不能多选。
有没有办法让多选列表框绑定到数据库?
答案 0 :(得分:3)
数据绑定组件的问题在于它们依赖于数据源而数据源只有一个游标。这可能是原因。
顺便问一下,你需要更改数据吗?否则,您可以从数据集中填充正常的列表框。甚至使用不可见的数据列表框并将内容复制到普通列表框。
答案 1 :(得分:3)
据我所知 标准是您在列表中提供一组值,其中1代表当前记录 除非你有一个多值字段(针对最佳实践),否则我无法看到你如何多选......
或者您可能想要的实际上是一个子表?
答案 2 :(得分:1)
DevExpress TcxDBListBox支持多选。我使用绑定到数据库的多选下拉复选框,这很好。
组件具有可以实现转换为列表和从列表转换的方法; EditValueToStates和StatesToEditValue。虽然我存储的数据没有标准化(我存储了一个以分号分隔的版本号列表),但是我在字段上创建了一个全文搜索索引,用分号作为分隔符,现在我仍然可以执行优化搜索在那个领域。
答案 3 :(得分:1)
您可以创建自己的自定义列表框组件,该组件从TCustomListBox继承,并为列表添加Datasource属性,以及另一个属性(如TStrings)用作容纳选定值的容器。然后,您可以使用单击按钮将更改发布到数据库。
答案 4 :(得分:1)
如果你摆弄TDBGrid的一些选项并限制它显示的列,你可以创建一个看起来很像列表框的东西。尝试将Options属性设置为[dgTitles,dgTabs,dgRowSelect,dgAlwaysShowSelection,dgCancelOnExit,dgMultiSelect]并从那里开始工作。
答案 5 :(得分:0)
在TDbLookupListBox中,您可以选择将两个不同的东西绑定到数据;首先,您可以将列表绑定到数据集(ListSource / ListField / KeyField),其次,您可以将所选项绑定到另一个数据集(DataSource,DataField)中的字段。想要将项目列表绑定到数据集,然后手动管理多个选择,没有任何概念上的错误,但是我认为没有子类化并启用所需的控件样式,当前实现是不可能的。
答案 6 :(得分:0)
根据你对François的评论,我会使用普通的TListbox并编写代码将所有不同的值插入到列表中,然后自己处理多选值。 Jeremy的解决方案也有效,DevExpress Express Quantum Grid有一个很好的过滤系统,甚至可以为你节省一些其他的编程。