zoukankan      html  css  js  c++  java
  • [转载]FastReport 报表排序与cxGrid同步.

         //描述: cxGrid的 TableView 数据排序与对应的数据集同步, 该方法主要用于打印时
           //         的排序与所见到的排序保持一致;
           //参数: @tv: 排序的cxGridTableView
           //说明: @tv: 对应的数据集只支持 ADOQuery与 ClientDataSet;
           procedure cxGridSortSyncToDataSet(tv: TcxGridDBTableView); overload;

           //描述: 功能同上, 实现代码一样, 如果有更改就同步更改
           procedure cxGridSortSyncToDataSet(tv: TcxGridDBBandedTableView); overload;

    procedure cxGridSortSyncToDataSet(tv: TcxGridDBTableView);
    const
         SortArray: array[soAscending..soDescending] of string = ('ASC', 'DESC');
    var
         AscFields, DescFields, S, SortOrder: string;
         IndexPrint: string;
         I: integer;
         Index: integer;
         cds: TClientDataSet;
    begin
         S := '';
         AscFields := '';
         DescFields := '';
         if tv.SortedItemCount = 0 then
           Exit;
         if tv.DataController.DataSource.DataSet is TADOQuery then begin
           for I := 0 to tv.SortedItemCount - 1 do begin
             SortOrder := SortArray[tv.SortedItems[I].SortOrder];
             if S <> '' then
               S := S + ', ';
             Index := tv.SortedItems[I].Index;
             S := S + tv.Columns[Index].DataBinding.Field.FieldName + ' ' + SortOrder;
           end;
           (tv.DataController.DataSource.DataSet as TADOQuery).Sort := S;
         end else if (tv.DataController.DataSource.DataSet is TClientDataSet)     then begin
           Cds := tv.DataController.DataSource.DataSet as TClientDataSet;
           for I := 0 to tv.SortedItemCount - 1 do begin
             Index := tv.SortedItems[I].Index;
             S := tv.Columns[Index].DataBinding.Field.FieldName +';';
             AscFields := AscFields + S;
             if tv.SortedItems[I].SortOrder = soDescending then
               DescFields := DescFields + S;
           end;
           if AscFields <> '' then
             Delete(AscFields, Length(AscFields), 1); //删除 ;

           if DescFields <> '' then
             Delete(DescFields, Length(DescFields), 1);
           IndexPrint := TimeToStr(Now());
           Cds.IndexDefs.Clear;
           IndexPrint := TimeToStr(Now());
           cds.AddIndex(IndexPrint, AscFields, [], DescFields);
           cds.IndexName := IndexPrint;
         end;
    end;

  • 相关阅读:
    2.六角星绘制
    1.五角星绘制
    Redis
    javaScript
    反射
    区分'方法'和'函数'
    递归,二分法
    匿名函数,排序函数,过滤函数,映射函数,
    生成器,生成器函数,推导式,生成器表达式.
    函数,闭包,迭代器
  • 原文地址:https://www.cnblogs.com/eastson/p/1656757.html
Copyright © 2011-2022 走看看