我的申请存在问题。
首先,抱歉我的英语,我来自智利,我还在学习。
我有一个方法可以为Excel提供来自db的信息。客户不需要在屏幕上看到报告,他们只需要从应用程序下载它。
此方法调用存储过程,该过程会提供过多数据(大约600列和20000行),因此,当将表分配给GridView时,在DataBind()上会抛出System.OutOfMemoryException
。
还有其他方法可以使用数据加载GridView吗?我无法过滤查询或简化它,因为客户需要报告中的每个日期。 我正在使用Visual Studio 2010,Framework 4.0,SQL Server 2008。
这是方法:
private void getsReport()
{
string reportName = "Globarl_Report_" + User.Identity.Name + "_" + DateTime.Now.ToString("yyyyMMdd")+".xls";
Database db = DatabaseFactory.CreateDatabase(ConfigurationManager.AppSettings["SNAT"].ToString());
DBCommandWrapper com = db.GetSqlStringCommandWrapper("usp_con_global_report);// sp that give report.
com.CommandTimeout = 360;
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter htw = new HtmlTextWriter(sw);
Page pagina = new Page();
HtmlForm form = new HtmlForm();
DataTable tabla = db.ExecuteDataSet(com).Tables[0]; ;
GridView dg = new GridView();
dg.EnableViewState = false;
dg.DataSource = tabla;
dg.DataBind();//THIS LINES THROWS EXCEPTION!!
pagina.EnableEventValidation = false;
pagina.DesignerInitialize();
pagina.Controls.Add(form);
form.Controls.Add(dg);
pagina.RenderControl(htw);
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename=" + nombreArchivo);
Response.Charset = "UTF-8";
Response.ContentEncoding = Encoding.Default;
Response.Write(sb.ToString());
Response.End();
}
感谢您的帮助!!
答案 0 :(得分:0)
您应该在网格视图中添加寻呼机。
答案 1 :(得分:0)
您是否正在将所有数据加载到grig以便只能导出到Excel?
在这种情况下,您可以在服务器上创建csv文件(通过计划或动态客户端请求)并在页面上放置链接以下载它。
稍后可以使用Excel(或任何其他电子表格处理器)打开它