FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 16146|回复: 12
打印 上一主题 下一主题

Grid在分页的情况下依然能导出全部数据为Excel

[复制链接]
跳转到指定楼层
楼主
发表于 2013-6-28 09:59:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 任文彬 于 2013-6-28 10:02 编辑
  1. public static class GridHelper
  2. {
  3.     public static string FormatAsHtml(Grid grid, DataTable table)
  4.     {
  5.         var sb = new StringBuilder("<table frame='box' border='1'>");
  6.         var fields=GetBoundFields(grid);
  7.         AppendHeaderRow(fields, sb);
  8.         AppendDataRow(fields, table, sb);
  9.         sb.Append("</table>");
  10.         return sb.ToString();
  11.     }

  12.     private static IList<BoundField> GetBoundFields(Grid grid)
  13.     {
  14.         var columns = new List<BoundField>();
  15.         for (int i = 0; i < grid.Columns.Count; ++i)
  16.         {
  17.             var c = grid.Columns[i] as BoundField;
  18.             if (c == null)  //只导出BoundField
  19.                 continue;
  20.             columns.Add(c);
  21.         }
  22.         return columns;
  23.     }

  24.     private static void AppendDataRow(IList<BoundField> fields, DataTable table, StringBuilder sb)
  25.     {
  26.         for (int rowIndex = 0; rowIndex < table.Rows.Count; ++rowIndex)
  27.         {
  28.             sb.Append("<tr>");
  29.             for (int colIndex = 0; colIndex < fields.Count; ++colIndex)
  30.             {
  31.                 AppendDataCell(sb, table.Rows[rowIndex], fields[colIndex].DataField, fields[colIndex].DataFormatString);
  32.             }
  33.             sb.Append("</tr>");
  34.         }
  35.     }


  36.     private static void AppendDataCell(StringBuilder sb, DataRow row, string dataField, string dataFormat)
  37.     {
  38.         if (!row.Table.Columns.Contains(dataField))
  39.         {
  40.             sb.Append("<td></td>");
  41.         }
  42.         else
  43.         {
  44.             var data=row[dataField];
  45.             if (data is Decimal || data is Double || data is Single)
  46.                 sb.Append("<td align='right'>");
  47.             else
  48.                 sb.Append("<td>");
  49.             string cellText = FormatCellText(dataFormat, data);
  50.             sb.Append(cellText);
  51.             sb.Append("</td>");
  52.         }
  53.     }

  54.     private static string FormatCellText(string format, object data)
  55.     {
  56.         string cellText;
  57.         if (data == null || Convert.IsDBNull(data))
  58.             cellText = "";
  59.         else if (string.IsNullOrEmpty(format))
  60.             cellText = data.ToString();
  61.         else
  62.             cellText = string.Format(format, data);
  63.         return cellText;
  64.     }

  65.     private static void AppendHeaderRow(IList<BoundField> fields, StringBuilder sb)
  66.     {
  67.         sb.Append("<tr style='font-weight:bold; text-align:center'>");
  68.         for (int i = 0; i < fields.Count; ++i)
  69.         {
  70.             var col = fields[i];
  71.             sb.Append("<td>").Append(col.HeaderText).Append("</td>");
  72.         }
  73.         sb.Append("</tr>");
  74.     }
  75. }
复制代码
沙发
发表于 2013-6-28 12:46:35 | 只看该作者
都是高手啊。
板凳
发表于 2013-7-4 18:32:42 | 只看该作者
谢谢分享,正需要
地板
发表于 2013-7-4 19:00:31 | 只看该作者
是新建一个类是吧?
请问有调用方法示例吗?
--我是初学者
5#
发表于 2013-7-5 11:46:16 | 只看该作者
Grid在分页的情况下依然能导出全部数据为Excel
终于可以了,
--昨天折腾了一晚!
衷心的感谢:作者:任文彬
还有群友:angrySperm(UID:3175)(352290642) 和UID:4046(569251516) 11:05:29
6#
发表于 2013-7-5 12:02:12 | 只看该作者
能共享一下
7#
发表于 2013-7-5 12:30:13 来自手机 | 只看该作者
不错,经常会用到
8#
发表于 2013-8-19 00:01:55 | 只看该作者
有下载的吗
9#
发表于 2013-8-19 12:24:50 | 只看该作者
请问下,上面的代码不是只是返回一个html字符串吗?html字符串能转换成excel表吗?还有上面的table是哪里来的数据?是用什么保存下来的?如果是再查询一次的话,直接用插件导出不就行了?
10#
发表于 2013-8-19 20:00:19 | 只看该作者
根据你自定义的TABLE条件直接导出为EXCEL文件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-9-24 09:38 , Processed in 0.046729 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表