FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

搜索
查看: 1642|回复: 2
打印 上一主题 下一主题

Grid如何导出分页数据?

[复制链接]
跳转到指定楼层
楼主
发表于 2013-6-13 11:51:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ^老鼠^ 于 2013-6-13 11:55 编辑

例子里只能导出第一页的数据,如果要导出所有数据,我的方法是绑定到datatable里再导出,但这样数据多,效率太低了,有没有其它办法啊?

我有1~10W条数据需要导出
沙发
发表于 2013-6-13 12:44:16 | 只看该作者
  1. protected void btnExport_Click(object sender, EventArgs e)
  2.         {
  3.             //if (Session["zhiwu"].ToString().Trim() == "2")
  4.             //{
  5.             //    Alert.Show("<b>出现错误啦!</b>即日起,业务员不允许自行导出流向啦。请向直属经理申请,谢谢。", MessageBoxIcon.Error);
  6.             //    return;
  7.             //}
  8.             //else
  9.             //{
  10.                 //因为Grid1默认只导出当前数据,所以首先设置为每页显示10000条,等有好的解决方案后解决
  11.                 Grid1.PageSize = 10000;
  12.                 BindGrid();
  13.                 Response.ClearContent();
  14.                 Response.AddHeader("content-disposition", "attachment; filename=Liuxiang.xls");
  15.                 Response.ContentType = "application/excel";
  16.                 Response.Charset = "UTF-8";
  17.                 Response.ContentEncoding = System.Text.Encoding.UTF8;
  18.                 Response.Write(GetGridTableHtml(Grid1));
  19.                 Response.End();
  20.             //}
  21.             
  22.         }
  23.         private string GetGridTableHtml(Grid grid)
  24.         {
  25.             StringBuilder sb = new StringBuilder();

  26.             sb.Append("<table cellspacing="0" rules="all" border="1" style="border-collapse:collapse;">");

  27.             sb.Append("<tr>");
  28.             foreach (GridColumn column in grid.Columns)
  29.             {
  30.                 sb.AppendFormat("<td>{0}</td>", column.HeaderText);
  31.             }
  32.             sb.Append("</tr>");

  33.             foreach (GridRow row in grid.Rows)
  34.             {
  35.                 sb.Append("<tr>");
  36.                 foreach (object value in row.Values)
  37.                 {
  38.                     string html = value.ToString();
  39.                     // 处理CheckBox
  40.                     if (html.Contains("box-grid-static-checkbox"))
  41.                     {
  42.                         if (html.Contains("box-grid-static-checkbox-uncheck"))
  43.                         {
  44.                             html = "×";
  45.                         }
  46.                         else
  47.                         {
  48.                             html = "√";
  49.                         }
  50.                     }

  51.                     // 处理图片
  52.                     if (html.Contains("<img"))
  53.                     {
  54.                         string prefix = Request.Url.AbsoluteUri.Replace(Request.Url.AbsolutePath, "");
  55.                         html = html.Replace("src="", "src="" + prefix);
  56.                     }

  57.                     sb.AppendFormat("<td>{0}</td>", html);
  58.                 }
  59.                 sb.Append("</tr>");
  60.             }

  61.             sb.Append("</table>");

  62.             return sb.ToString();
  63.         }
复制代码
板凳
发表于 2013-6-13 15:19:15 | 只看该作者
目前也就是2楼的方案,不过我用的是NPOI,grid导出,如果只要导出单张表的数据,可以直接用NPOI读取数据后导出,跳过FineUI,而且生成的是真正的Excel格式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 18:51 , Processed in 0.043364 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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