FineUI 官方论坛
标题:
Grid在分页的情况下依然能导出全部数据为Excel
[打印本页]
作者:
任文彬
时间:
2013-6-28 09:59
标题:
Grid在分页的情况下依然能导出全部数据为Excel
本帖最后由 任文彬 于 2013-6-28 10:02 编辑
public static class GridHelper
{
public static string FormatAsHtml(Grid grid, DataTable table)
{
var sb = new StringBuilder("<table frame='box' border='1'>");
var fields=GetBoundFields(grid);
AppendHeaderRow(fields, sb);
AppendDataRow(fields, table, sb);
sb.Append("</table>");
return sb.ToString();
}
private static IList<BoundField> GetBoundFields(Grid grid)
{
var columns = new List<BoundField>();
for (int i = 0; i < grid.Columns.Count; ++i)
{
var c = grid.Columns[i] as BoundField;
if (c == null) //只导出BoundField
continue;
columns.Add(c);
}
return columns;
}
private static void AppendDataRow(IList<BoundField> fields, DataTable table, StringBuilder sb)
{
for (int rowIndex = 0; rowIndex < table.Rows.Count; ++rowIndex)
{
sb.Append("<tr>");
for (int colIndex = 0; colIndex < fields.Count; ++colIndex)
{
AppendDataCell(sb, table.Rows[rowIndex], fields[colIndex].DataField, fields[colIndex].DataFormatString);
}
sb.Append("</tr>");
}
}
private static void AppendDataCell(StringBuilder sb, DataRow row, string dataField, string dataFormat)
{
if (!row.Table.Columns.Contains(dataField))
{
sb.Append("<td></td>");
}
else
{
var data=row[dataField];
if (data is Decimal || data is Double || data is Single)
sb.Append("<td align='right'>");
else
sb.Append("<td>");
string cellText = FormatCellText(dataFormat, data);
sb.Append(cellText);
sb.Append("</td>");
}
}
private static string FormatCellText(string format, object data)
{
string cellText;
if (data == null || Convert.IsDBNull(data))
cellText = "";
else if (string.IsNullOrEmpty(format))
cellText = data.ToString();
else
cellText = string.Format(format, data);
return cellText;
}
private static void AppendHeaderRow(IList<BoundField> fields, StringBuilder sb)
{
sb.Append("<tr style='font-weight:bold; text-align:center'>");
for (int i = 0; i < fields.Count; ++i)
{
var col = fields[i];
sb.Append("<td>").Append(col.HeaderText).Append("</td>");
}
sb.Append("</tr>");
}
}
复制代码
作者:
冬天
时间:
2013-6-28 12:46
都是高手啊。
作者:
erp8@live.cn
时间:
2013-7-4 18:32
谢谢分享,正需要
作者:
erp8@live.cn
时间:
2013-7-4 19:00
是新建一个类是吧?
请问有调用方法示例吗?
--我是初学者
作者:
erp8@live.cn
时间:
2013-7-5 11:46
Grid在分页的情况下依然能导出全部数据为Excel
终于可以了,
--昨天折腾了一晚!
衷心的感谢:作者:任文彬
还有群友:angrySperm(UID:3175)(352290642) 和UID:4046(569251516) 11:05:29
作者:
yygy
时间:
2013-7-5 12:02
能共享一下
作者:
孤独的过客
时间:
2013-7-5 12:30
不错,经常会用到
作者:
fat
时间:
2013-8-19 00:01
有下载的吗
作者:
世界没有真情
时间:
2013-8-19 12:24
请问下,上面的代码不是只是返回一个html字符串吗?html字符串能转换成excel表吗?还有上面的table是哪里来的数据?是用什么保存下来的?如果是再查询一次的话,直接用插件导出不就行了?
作者:
erp8@live.cn
时间:
2013-8-19 20:00
根据你自定义的TABLE条件直接导出为EXCEL文件
作者:
delphi9
时间:
2013-8-20 18:47
本帖最后由 delphi9 于 2013-8-20 18:50 编辑
怎么用的?楼上能给个例子?我是初学者:)
这个貌似生成了一个<table>,怎么把生成table另存为excel?
作者:
除了时间
时间:
2013-9-24 09:03
不孬,学习了,感谢楼主
建个GridHelper类,导出时,调用FormatAsHtml()此方法就行了。
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls");
Response.ContentType = "application/excel";
Response.Write(
FormatAsHtml(Grid1,Table)
);
Response.End();
作者:
甘桂
时间:
2013-12-11 11:48
数据源单独一个 private void BindGrid()。在导出事件中,再调用一次数据绑定。这样的绑定是不分页的。这是取简单的方法。
欢迎光临 FineUI 官方论坛 (https://fineui.com/bbs/)
Powered by Discuz! X3.4