gpt4 book ai didi

c++ - DBGrid 按计算字段排序

转载 作者:太空宇宙 更新时间:2023-11-04 14:15:15 26 4
gpt4 key购买 nike

我的问题是:如何通过计算字段对 DBGrid 进行排序。我正在使用 C++Builder Starter Editon,并且此版本中没有可用的 ClientDataSet 来在字段上创建索引并按列的索引排序。所以这不是一个选项。 (在许多线程中阅读此内容)我正在使用 TIBDataSet(下面的 ibds)并且正在过滤数据。工作正常......对于 DB 列,而不是计算列......我有什么想法可以解决这个问题吗?

void __fastcall TForm1::DBGrid3TitleClick(TColumn *Column)
{
static cIdx = 0;
static String oby = "ASC";

TBookmark CurrentPosition;
TIBDataSet *ibds = IBDS_accountsDist;
CurrentPosition = ibds->GetBookmark();
if (cIdx != Column->Index) {
oby = "ASC"; // ANOTHER column choosen
} else if (oby == "ASC") {
oby = "DESC";
} else oby = "ASC";
cIdx = Column->Index;

ibds->Filtered = false;
switch (Column->Index){
case 0: ibds->Filter = "ORDER BY SumAj "+oby; break; // SumAj is a calculated field => Does not work
case 1: ibds->Filter = "ORDER BY CSAL_ACCOUNTNAME "+ oby; break; // DB-field WORKS FINE
}
ibds->Filtered = true;
ibds->GotoBookmark(CurrentPosition);
}

最佳答案

你做不到。 TIBDataSet 是底层数据库的表示。基本上,它按照 SQL 中定义的顺序获取记录。

最简单的方法是使用 TDBClientDataset,但它不包含在 c++ Builder 的入门版中。您可以探索其他方式,例如将所有记录预加载到 std::list 中,然后使用 order 函数对记录进行排序。最后,您可以使用简单的 TGrid 或 TStringGrid 显示它们。

无论如何,我建议升级 C++Builder,因为 TClientDataSet 是大多数数据项目中的主要部分之一,特别是当您需要创建中大型项目时。

将 TIBDataSet 等数据库特定组件与用户界面混合会损害项目的可扩展性和维护性。

关于c++ - DBGrid 按计算字段排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11804731/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com