2008-10-28 69 views
4

我正在使用Delphi 6,并且我想要一个带有多选的数据库绑定列表框。我发现了三种列表框:TListBox,TDBListBoxTDBLookupListBox在Delphi 6中绑定到数据库的多选列表框

至于我能理解,TListbox不绑定到数据库。 TDBListBoxTDBLookupListBox不能被多选。

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

回答

3

与数据绑定组件的问题是,他们依靠数据源和数据源只有一个光标。这可能是为什么。

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

3

据我所知。
标准是您提供的列表中有一堆值,其中1代表当前记录。
除非你有一个多值字段(针对最佳实践),否则我无法看到你如何多选...

或者你可能想要的其实是一个子表?

+0

我想为表格创建一个过滤器,并且列表框是过滤条件之一。我想用数据库中的表格填充列表框。 – Blue 2008-10-28 19:44:47

0

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

1

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

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

0

根据弗朗索瓦您的意见,我会用一个正常的TListBox和编写代码来所有不同值插入到列表中,然后自己处理多选择值。 Jeremy的解决方案也可行,DevExpress Express Quantum Grid有一个很好的过滤系统,甚至可以为您节省一些其他的编程。

1

您可以创建一个从TCustomListBox下降自己的自定义列表框组件,添加一个数据源属性列表,并用作容器来保存选定值其他属性,如字符串列表。然后,您可以使用按钮单击将更改发布到数据库。

1

如果你拨弄一些的TDBGrid中的选项,并限制其显示的列,可以使一些看起来完全就像一个列表框。尝试将Options属性设置为[dgTitles,dgTabs,dgRowSelect,dgAlwaysShowSelection,dgCancelOnExit,dgMultiSelect]并从那里开始工作。