本文主要是介绍TClientDataSet研究之一:一个分组函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
TClientDataSet是一个非常不错的内存数据集,不仅拥有TDataSet通用的数据集功能,还拥有其独特的查询分组统计功能。
为了表述方便,TClientDataSet简称为CDS。
设置分组功能如下操作:
1、首先,必须建立CDS.IndexDefs索引。直接使用CDS.IndexFieldnames是不行,原因是这种简单的建立索引方式无法使用GroupingLevel 属性。
2、设置Aggregates。
3、激活Aggregates。
下面是一个例子,比如,我们希望对某个数据集的字段进行分组显示,方法很多,但我们不希望再去从后台数据库查询,希望充分利用现有的CDS数据集进行分组,并将其结果集添加到TStrings(如TCombobox的Items)。
function GetGroupName(cdsData: TClientDataSet;
const GroupName: string; GroupList: TStrings): Integer;
var
CDS: TClientDataSet;
sIndexName: string;
begin
Result := -1;
CDS := TClientDataSet.Create(nil);
try
CDS.DisableControls;
sIndexName := 'cds_Index_' + GroupName;
if not cdsData.Active then
Exit;
CDS.Data := cdsData.Data; //复制数据,避免建立索引与原有数据集冲突
with CDS.IndexDefs.AddIndexDef do
begin
Name := sIndexName;
Fields := GroupName;
GroupingLevel := 1; //非常重要的属性
end;
CDS.IndexName := sIndexName;//当前使用索引
with CDS.Aggregates.Add do
begin
GroupingLevel := 1;
IndexName := sIndexName;
Visible := False;
Active := True;
end;
CDS.AggregatesActive := True;
GroupList.Clear;
GroupList.Add('');
CDS.First;
Result := 0;
while not CDS.Eof do
begin
if gbFirst in CDS.GetGroupState(1) then
begin
GroupList.Add(CDS.FieldByName(GroupName).AsString);
Inc(Result);
end;
CDS.Next;
end;
finally
CDS.EnableControls;
CDS.Free;
end;
end;
评论这张
转发至微博
为了表述方便,TClientDataSet简称为CDS。
设置分组功能如下操作:
1、首先,必须建立CDS.IndexDefs索引。直接使用CDS.IndexFieldnames是不行,原因是这种简单的建立索引方式无法使用GroupingLevel 属性。
2、设置Aggregates。
3、激活Aggregates。
下面是一个例子,比如,我们希望对某个数据集的字段进行分组显示,方法很多,但我们不希望再去从后台数据库查询,希望充分利用现有的CDS数据集进行分组,并将其结果集添加到TStrings(如TCombobox的Items)。
function GetGroupName(cdsData: TClientDataSet;
const GroupName: string; GroupList: TStrings): Integer;
var
CDS: TClientDataSet;
sIndexName: string;
begin
Result := -1;
CDS := TClientDataSet.Create(nil);
try
CDS.DisableControls;
sIndexName := 'cds_Index_' + GroupName;
if not cdsData.Active then
Exit;
CDS.Data := cdsData.Data; //复制数据,避免建立索引与原有数据集冲突
with CDS.IndexDefs.AddIndexDef do
begin
Name := sIndexName;
Fields := GroupName;
GroupingLevel := 1; //非常重要的属性
end;
CDS.IndexName := sIndexName;//当前使用索引
with CDS.Aggregates.Add do
begin
GroupingLevel := 1;
IndexName := sIndexName;
Visible := False;
Active := True;
end;
CDS.AggregatesActive := True;
GroupList.Clear;
GroupList.Add('');
CDS.First;
Result := 0;
while not CDS.Eof do
begin
if gbFirst in CDS.GetGroupState(1) then
begin
GroupList.Add(CDS.FieldByName(GroupName).AsString);
Inc(Result);
end;
CDS.Next;
end;
finally
CDS.EnableControls;
CDS.Free;
end;
end;
评论这张
转发至微博
这篇关于TClientDataSet研究之一:一个分组函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!