我应该如何在asp.net页面上提供下载功能,以便从一个数据库表中下载一系列行,该表表示为一个linq2sql类,该类只具有成员的基本类型(理想情况下可以转换为一种易于被Excel读取的格式)?
例如。
public class Customer
{
public int CustomerID;
public string FirstName;
public string LastName;
}到目前为止我尝试过的东西。。
最初,我创建了一个DataTable,将所有客户数据添加到这个表中,并将其绑定到一个DataGrid中,然后有一个名为DataGrid1.RenderControl的下载按钮,该按钮被写入到响应中(内容类型为"application/vnd.ms-excel"),并对少数客户运行良好。
但是,,该表中的行数现在超过10,000行,预计将达到100,000多行,因此在用户单击“下载”按钮之前,在页面上显示所有这些数据变得非常困难。
所以问题是,如何提供下载所有这些数据的能力,而不必首先在DataGrid上显示所有这些数据呢?
发布于 2009-09-01 05:20:10
因此,经过一番研究,我首先尝试的解决方案是使用来自http://www.asp.net/learn/videos/video-449.aspx的代码示例的稍微修改的版本,并使用以下代码格式化DataTable中的每个行值,以避免潜在的问题文本:
private static string FormatForCsv(object value)
{
var stringValue = value == null ? string.Empty : value.ToString();
if (stringValue.Contains("\"")) { stringValue = stringValue.Replace("\"", "\"\""); }
return "\"" + stringValue + "\"";
}对于任何对以上内容感兴趣的人来说,我基本上是围绕在引号中的每一个值,并且通过使它们成为双引号来规避任何现有的引号。也就是说。
My Dog => "My Dog"
My "Happy" Dog => "My ""Happy"" Dog"就目前而言,这似乎对少量的唱片起到了一定的作用。我很快就会用>10,000张唱片试一试,看看结果如何.
编辑:此解决方案已在生产中成功地进行了数千条记录。
发布于 2009-09-01 01:15:13
在用户请求下载后,您可以将数据写入文件(.CSV、Excel、XML等)。在服务器上,然后发送一个重定向到文件URL。
发布于 2009-09-01 03:59:15
我在Matt博客上使用了下面的方法来创建大型唱片集。
将GridView导出到Excel
如果请求超时有问题,请尝试在web.config中增加http请求时间。
https://stackoverflow.com/questions/1360121
复制相似问题