4

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

据我了解,TListbox是不绑定数据库的。TDBListBox并且TDBLookupListBox不能多选。

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

4

7 回答 7

4

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

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

于 2008-10-28T19:34:24.400 回答
3

据我所知不是。
标准是您在列表中提供一堆值,其中 1 代表当前记录。
除非您有一个多值字段(违反最佳实践),否则我看不出您如何进行多选...

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

于 2008-10-28T19:37:23.910 回答
1

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

这些组件具有您可以实现的方法来与您的列表相互转换;EditValueToStates 和 StatesToEditValue。虽然我存储的数据没有标准化(我存储了一个以分号分隔的版本号列表),但我在字段上创建了一个全文搜索索引,以分号作为分隔符,现在我仍然可以执行优化搜索在那个领域。

于 2008-10-28T22:12:53.300 回答
1

您可以创建自己的自定义列表框组件,该组件源自 TCustomListBox,并为您的列表添加一个 Datasource 属性,以及另一个属性(例如 TStrings)用作保存选定值的容器。然后,您可以使用单击按钮将更改发布到数据库。

于 2008-10-31T12:32:00.800 回答
1

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

于 2008-12-20T17:38:28.687 回答
0

在 TDbLookupListBox 中,您可以选择将两种不同的东西绑定到数据;首先,您可以将列表绑定到数据集(ListSource/ListField/KeyField),其次您可以将所选项目绑定到另一个数据集中的字段(DataSource、DataField)。想要将项目列表绑定到数据集,然后手动管理多个选择在概念上没有任何问题,但是我认为在没有子类化和启用所需控件样式的情况下,当前的实现是不可能的。

于 2008-10-28T20:31:49.980 回答
0

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

于 2008-10-28T22:32:14.290 回答