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