Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Итоги для DBGrid


Автор: DmiSbr 2.9.2010, 20:37
Выношу на суд вариант решения. Просьба проверить на корректность. А если совсем плохо сделано и данный вариант не имеет смысла, то подсказать направление.
Сразу оговорюсь, что требование - использовать стандартный DBGrid.
Создаем тип:
Код

PData = ^TData;
  TData = record
    Sum: Real;
  end;

И переменную
Код

    SumData: TList;

Суммирование ведем в обработчике
Код

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var aData: PData;

  procedure CalcSumData;
  var k: integer;
    all_ves: real;
  begin
    all_summ:=0;
    if SumData.Count>0 then
      for k:=0 to SumData.Count-1 do begin
        aData:=SumData.Items[k];
        all_summ:=all_summ + aData.Sum;
      end;
    Label1.Caption:=FormatFloat('# ##0.00', all_summ);
  end;

begin
  if Column.FieldName='SUMMA' then begin
      if SumData.Count<MyDataSet.RecordCount then begin
        New(aData);
        aData.Sum:=MyDataSet.FieldByName('SUMMA').AsFloat;
          SumData.Add(aData)
      end else
      if SumData.Count>0 then begin
        aData:=SumData.Items[MyDataSet.RecNo-1];
        if aData.RecNo=MyDataSet.RecNo-1 then begin
          aData.Sum:=MyDataSet.FieldByName('SUMMA').AsFloat;
          SumData.Items[MyDataSet..RecNo-1]:=aData;
        end;
      end;
      CalcSumData;
    end;
  end;


Просьба сильно не пинать, конструктивные мысли приветствуются.
Заранее спасибо

 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)