uniGUI试用笔记(七)

uniGUI的文件下载由于TUniSession的存在而变得非常简单,最典型的一个例子就是将列表中的所有数据导出到Excel中。服务器上采用TMS FlexCel控件,先将数据集中的记录导入到Excel文件中,然后再将Excel文件内容输出到内存流中,最后通过TUniSession发送到客户端。代码如下:

procedure TfmeWebDBListBase.ExportData; 
var 
  i, rowindex, colindex: Integer; 
  ms : TMemoryStream; 
begin 
  { 检查数据集 }
  if Assigned(cdsMain) and cdsMain.Active then 
  try 
    { 创建Excel文件 } 
    FlexCelImport1.NewFile(1); 
    cdsMain.First; 
    { 第一行为标题 } 
    rowindex := 1; 
    colindex := 1; 
    for i := 0 to cdsMain.FieldCount -1 do
      { 只导出数据集中可视的字段 } 
      if cdsMain.Fields[i].Visible then 
      begin 
        FlexCelImport1.CellValue[rowindex, colindex] := cdsMain.Fields[i].DisplayLabel; 
        inc(colindex); 
      end;
    { 依次导出数据 } 
    while not cdsMain.Eof do 
    begin
      { 增加一行 } 
      inc(rowindex); 
      colindex := 1; 
      for i := 0 to cdsMain.FieldCount -1 do
        { 只导出数据集中可视的字段 } 
        if cdsMain.Fields[i].Visible then 
        begin
          { 时间和日期字段需要单独出来一下,否则出来的都是浮点数 } 
          if cdsMain.Fields[i].DataType in [ftDate, ftDateTime, ftTime, ftTimeStamp] then 
            FlexCelImport1.CellValue[rowindex, colindex] := cdsMain.Fields[i].AsString 
          else 
            FlexCelImport1.CellValue[rowindex, colindex] := cdsMain.Fields[i].Value; 
          inc(colindex); 
        end;
      { 下一条 } 
      cdsMain.Next; 
    end; 

    { 创建内存流 } 
    ms := TMemoryStream.Create; 
    try
      { 将Excel保存到内存流 } 
      FlexCelImport1.SaveToStream(ms); 
      ms.Position := 0;
      { 将数据流发送到客户端,同时指定下载文件名,非常简单 } 
      MainForm.uniApplication.UniSession.SendStream( 
        ms, ModelName + '.xls' ); 
    finally 
      ms.Free; 
    { 清理内存 }
      FlexCelImport1.CloseFile; 
    end;
  except 
    on E : Exception do 
      FlexCelImport1.CloseFile; 
  end; 
end;

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值