这是我的问题:我想在插入新记录后禁用tdbgrid
自动排序。我希望tdbgrid
仅在用户询问它们时执行排序(单击列标题)。
我有一个名为f4400
的表,有两列,sec_code
和sec_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个晚上一直很头疼。
提前致谢
答案 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
序列中的行。