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();
cdsMain.First;
{ 第一行为标题 }
rowindex := ;
colindex := ;
for i := to cdsMain.FieldCount - 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 := ;
for i := to cdsMain.FieldCount - 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 := ;
{ 将数据流发送到客户端,同时指定下载文件名,非常简单 }
MainForm.uniApplication.UniSession.SendStream(
ms, ModelName + '.xls' );
finally
ms.Free;
{ 清理内存 }
FlexCelImport1.CloseFile;
end;
except
on E : Exception do
FlexCelImport1.CloseFile;
end;
end;

最新文章

  1. java深入技术九 (注解)
  2. Android(Linux)控制GPIO方法二
  3. 在IntelliJ IDEA中添加框架支持时找不到Hibernate的解决办法
  4. iOS 页面间几种传值方式(属性,代理,block,单例,通知)
  5. 关于原生的Javascript
  6. 模拟Select-Options对象实现多项数据输入功能
  7. 名词释义(ActiveMQ 和 Webservice)
  8. win7刷新图标缓存
  9. SecureCRT上传、下载文件 使用sz与rz命令
  10. mac 布置 git仓库服务器
  11. Android记录4--自定义ToggleButton+用SharedPreferences保存用户配置
  12. 【HDU 5808】 Price List Strike Back (整体二分+动态规划)
  13. Robot Framework学习笔记(九)------创建资源和用户关键字
  14. 解决tomcat部署项目中碰到的几个问题
  15. redis-win-server 正确启动方式
  16. select2的用法
  17. spring boot项目使用外部tomcat启动失败总结
  18. one order 理解
  19. Java开发工程师基础Math,Random,Scanner类的使用
  20. Servet3.0于Servlet2.5比较

热门文章

  1. Oracle / PLSQL函数 - DECODE
  2. CoreWebApi集成Exceptionless
  3. oauth2.0+app方式 webgis 授权
  4. linux 下nginx
  5. Hive 的排名和跨行 窗口函数及其使用
  6. usdt钱包开发,比特币协议 Omni 层协议 USDT
  7. 360浏览器有个 谷歌访问助手(插件管理里搜谷歌即可) 可以免费访问:谷歌搜索,Google+ gmail
  8. PLSQL 问题小记
  9. jquery遍历获取每一行数据进行对比
  10. vue2+animate.css