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

Posted

技术标签:

【中文标题】Delphi 6中绑定到数据库的多选列表框【英文标题】:Multiselect listbox bound to database in Delphi 6 【发布时间】:2010-09-19 15:52:21 【问题描述】:

我使用的是 Delphi 6,我想要一个带有多选功能的数据库绑定列表框。我发现了三种类型的列表框:TListBoxTDBListBoxTDBLookupListBox

据我了解,TListbox 未绑定到数据库。 TDBListBoxTDBLookupListBox 不能多选。

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

【问题讨论】:

【参考方案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中绑定到数据库的多选列表框的主要内容,如果未能解决你的问题,请参考以下文章

使用多选列表框后出现错误 3075-运行查询

vue添加第一行为空的多选框

delphi中如何实现checkbox的多选

MVC 5 多选列表值未绑定到发布时的模型

为啥我的绑定 [String] 不会更改我的多选列表 SwiftUI

element-ui中el-table的多选默认选中