首页 > 代码库 > uniGUI试用笔记(七)

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;

 

uniGUI试用笔记(七)