TDBGrid插入后禁用自动排序

时间:2012-03-02 02:18:32

标签: delphi

这是我的问题:我想在插入新记录后禁用tdbgrid自动排序。我希望tdbgrid仅在用户询问它们时执行排序(单击列标题)。

我有一个名为f4400的表,有两列,sec_codesec_desc(都是varchar)。 假设表中包含这些记录:

sec_code          sec_desc
1 , section 1     xxxxxxxxxxxxxxxxx
2 , section 2     xxxxxxxxxxxxxxxxx
3 , section 3     xxxxxxxxxxxxxxxxx

当我查询f4400并将其放入tdbgrid时,两者看起来都是一样的。当我插入新记录时,让我们说(“11”,“第11节”),我的网格现在看起来像这样:

sec_code          sec_desc
1 , section 1     xxxxxxxxxxxxxxxx 
2 , section 2     xxxxxxxxxxxxxxxx 
3 , section 3     xxxxxxxxxxxxxxxx 
11 , section 11   xxxxxxxxxxxxxxxx
到目前为止一切顺利。现在,我将按sec_code desc排序我的网格。我的tdbgrid现在看起来像这样:

3 , section 3     xxxxxxxxxxxxxxxx
2 , section 2     xxxxxxxxxxxxxxxx
1 , section 1     xxxxxxxxxxxxxxxx
11 , section 11   xxxxxxxxxxxxxxxx

现在,我将插入一条新记录,让我们说(“21”,“第21节”),tdbgrid会给我一个结果:

sec_code          sec_desc
3 , section 3     xxxxxxxxxxxxxxxx
2 , section 2     xxxxxxxxxxxxxxxx
21 , section 21   xxxxxxxxxxxxxxxx
1 , section 1     xxxxxxxxxxxxxxxx
11 , section 11   xxxxxxxxxxxxxxxx

我想要的结果是:

sec_code          sec_desc
3 , section 3     xxxxxxxxxxxxxxxx
2 , section 2     xxxxxxxxxxxxxxxx
1 , section 1     xxxxxxxxxxxxxxxx
11 , section 11   xxxxxxxxxxxxxxxx
21 , section 21   xxxxxxxxxxxxxxxx

“sec_code 21”的行位置是我的问题。我将它插入tdbgrid的底部,所以我希望在网格底部看到“sec_code 21”。

我尝试使用tdbgrid.datasource.dataset.sort := '',但它会提供如下输出:

sec_code          sec_desc
1 , section 1     xxxxxxxxxxxxxxxx
11 , section 11   xxxxxxxxxxxxxxxx
2 , section 2     xxxxxxxxxxxxxxxx
21 , section 21   xxxxxxxxxxxxxxxx
3 , section 3     xxxxxxxxxxxxxxxx

我尝试使用tdbgrid.datasource.dataset.IndexFielName:='',但它会给出一个像这样的输出:

sec_code          sec_desc
1 , section 1     xxxxxxxxxxxxxxxx
2 , section 2     xxxxxxxxxxxxxxxx
3 , section 3     xxxxxxxxxxxxxxxx
11 , section 11   xxxxxxxxxxxxxxxx
21 , section 21   xxxxxxxxxxxxxxxx

“sec_code 21”的位置不再是我的问题,但是,“sec_code 1,2,3和11”的位置不在我想要的位置。我对sec_code 1,2,3和11进行了降序排序,所以我希望看到sec_code 1,2,3和11(不包括sec_code 21)按降序排序。

希望您了解我的问题并尝试建议我如何解决这个问题。我大约3-4个晚上一直很头疼。

提前致谢

1 个答案:

答案 0 :(得分:2)

TDBGrid中的排序顺序由基础数据集中的索引顺序决定。

您的sec_code列显然是一个字符串/ char,因此按照您在该列上的索引排序为一列;这就解释了为什么你想要的排序顺序不是你得到的排序顺序。

如果您在数据集的末尾追加一行,并希望它留在那里,则需要将IndexName设置为''(意味着没有索引顺序)。

如果您希望它们按实际数字顺序排序(1,2,3,11,21),则需要将它们转换为数字。

但是,你正在寻找的最终输出毫无意义。您正在寻找降序值1, 2, 3, 11, 21并希望它出现3, 2, 1, 11, 21。那里没有逻辑。数字类型的有效期望值为21, 11, 3, 2, 1;字符类型的有效期望为3, 21, 2, 11, 1。除了实际的插入顺序之外,没有任何组合可以提供您正在寻找的结果,其中没有有效的索引并且您专门添加了3, 2, 1, 11, 21序列中的行。