5

是否可以更改使用索引TClientDataSet对记录进行排序的方式?在阅读了这个问题之后,我认为能够在客户端数据集中对字符串字段进行逻辑排序会很好。但是我不知道在索引方面如何覆盖客户端数据集的默认行为。有任何想法吗?

PS:我的 CDS 未链接到任何提供商。我正在寻找一种方法来修改TClientDataSet(或实现该机制的父级)本身的排序机制。

4

3 回答 3

5

您不能覆盖 ClientDataSet 的排序机制 - 除非您重写 Midas 的相应部分。

为了实现正确的排序(无论逻辑方式如何),您可以引入一个新字段并以某种方式设置其值,以便使用标准机制进行排序,它们将给出所需的排序顺序。

于 2013-07-29T17:42:47.810 回答
2

阅读Cary Jensen撰写的优秀在线文章理解 ClientDataSet索引。

它解释了如何使用IndexDefsIndexFieldNamesIndexName使用各种排序和索引方法。

编辑:回复您的评论。

您不能覆盖TClientDataSet中的排序方法,但您可以添加执行以下操作:

如果您想对现有字段以外的任何其他内容进行自定义排序,则必须添加一个计算字段,在OnCalcFields事件中执行一种顺序计算,然后将该字段添加到IndexDefs.

于 2013-07-29T15:38:40.177 回答
1

我会尝试使用提供给 ClientDataSet 的 SQL 语句来实现所需的排序。

例如,如果我在 FieldN 中处理以下字符串

a_1
a_20
a_10
a_2

我希望它们像这样排序(我认为这与逻辑上的意思相似

a_1
a_2
a_10
a_20

然后我会把 SQL 写成

SELECT     FieldA, 
           FieldB, 
           ... ,
           FieldN,
           CAST(SUBSTRING(FieldN, 3, 2) TO INTEGER) As FieldM '<== pseudocode
FROM       TableA
ORDER BY   FieldM

SubString 和 Cast to Integer 操作的确切语法取决于您使用的 DBMS。

于 2013-07-29T12:54:01.247 回答