asp.net 中Gridview控件导出到Excel问题 有一个系统,进行数据分页是采用gridview结合一个叫ultrapage分页控件进行实现的。现在需要添加“导出”功能,即将数据导出到excel中的,该如何实现呢?如果数据量比较大,又如何处理呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 导出excel 参考 UP,百度一下gridview导出excel,一大把 protected void Btn_Click(object sender, EventArgs e){string style = @"<style> .text { mso-number-format:\@; } </script> "; Response.ClearContent();Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls");Response.ContentType = "application/excel";StringWriter sw = new StringWriter();HtmlTextWriter htw = new HtmlTextWriter(sw);gridview1.RenderControl(htw);Response.Write(style); Response.Write(sw.ToString());Response.End();}public override void VerifyRenderingInServerForm(Control control){}或使用excel模板 这里就重新定义个gridview,然后在绑定数据源导出 protected void Btn_Click(object sender, EventArgs e){string style = @"<style> .text { mso-number-format:\@; } </script> "; Response.ClearContent();Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls");Response.ContentType = "application/excel";StringWriter sw = new StringWriter();HtmlTextWriter htw = new HtmlTextWriter(sw);gridview1.RenderControl(htw);Response.Write(style); Response.Write(sw.ToString());Response.End();}public override void VerifyRenderingInServerForm(Control control){}导出的时候,先把允许分页设置为true,导出之后在设为false,就行了! 为什么我现在我导出数据时,客户端提示了“打开,保存,消息”,但是当你点击“打开或保存”时,就会关联迅雷下载当前页面,而不会把excel下下来。这个页面是通过url带参来查询数据的,其它不是通过url带参进行查询的页面不存该问题。以下是网上的一段导出EXCEL代码:Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls"); string colHeaders = "", ls_item = ""; //定义表对象与行对象,同时用DataSet对其值进行初始化 System.Data.DataTable dt = ds.Tables[0]; DataRow[] myRow = dt.Select();//可以类似dt.Select("id>10")之形式达到数据筛选目的 int i = 0; int cl = dt.Columns.Count; //取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符 for (i = 0; i < cl; i++) { if (i == (cl - 1))//最后一列,加n { colHeaders += dt.Columns[i].Caption.ToString() + "\n"; } else { colHeaders += dt.Columns[i].Caption.ToString() + "\t"; } } Response.Write(colHeaders); //向HTTP输出流中写入取得的数据信息 //逐行处理数据 foreach (DataRow row in myRow) { //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据 for (i = 0; i < cl; i++) { if (i == (cl - 1))//最后一列,加n { ls_item += row[i].ToString() + "\n"; } else { ls_item += row[i].ToString() + "\t"; } } Response.Write(ls_item); ls_item = ""; } Response.Flush(); Response.End();现在很郁闷,都不知道怎么回事? private void CreateExcel(DataTable dt, string fileName) { HttpResponse resp; resp = Page.Response; resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); resp.AppendHeader("Content-Disposition", "attachment;filename=" + fileName); string colHeaders = "", ls_item = ""; ////定义表对象与行对象,同时用DataSet对其值进行初始化 //DataTable dt = ds.Tables[0]; DataRow[] myRow = dt.Select();//可以类似dt.Select("id>10")之形式达到数据筛选目的 int i = 0; int cl = dt.Columns.Count; //取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符 for (i = 0; i < cl; i++) { if (i == (cl - 1))//最后一列,加n { colHeaders += dt.Columns[i].Caption.ToString() + "\n"; } else { colHeaders += dt.Columns[i].Caption.ToString() + "\t"; } } resp.Write(colHeaders); //向HTTP输出流中写入取得的数据信息 //逐行处理数据 foreach (DataRow row in myRow) { //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据 for (i = 0; i < cl; i++) { if (i == (cl - 1))//最后一列,加n { ls_item += row[i].ToString() + "\n"; } else { ls_item += row[i].ToString() + "\t"; } } resp.Write(ls_item); ls_item = ""; } resp.End(); }和你的代码差不多,这个就是将一个DataTable中的数据导出到Excel中。(可以使用这个,我在一个项目中就是用的这个) UP,百度一下gridview导出excel,一大把 ASP.NET 3.5 从入门到精通(附带的20个项目开发模板,急求,非常之感谢) 绑定datagrid初始化问题,绑定后滚动条跑到了下方【图】 sqldatareader 取值问题 取不出值 怎么将注册的用户自动加到角色中??? 如何取出活动框架里面服务控件的值? 关闭子窗口,刷新子窗口的问题。请各位大侠帮忙 一个简单的问题 dataset问题,大家帮忙,多谢!!! 在VS.NET中,如何将一个asp.net项目的多个模块编译成不同的DLL? 如何实现N对N的结果输出呢 首尾页判断(储存过程)急急~!! 大家在项目中用Membership吗?
{
string style = @"<style> .text { mso-number-format:\@; } </script> ";
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls");
Response.ContentType = "application/excel";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
gridview1.RenderControl(htw);
Response.Write(style);
Response.Write(sw.ToString());
Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{}
或使用excel模板
protected void Btn_Click(object sender, EventArgs e)
{
string style = @"<style> .text { mso-number-format:\@; } </script> ";
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls");
Response.ContentType = "application/excel";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
gridview1.RenderControl(htw);
Response.Write(style);
Response.Write(sw.ToString());
Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{}导出的时候,先把允许分页设置为true,导出之后在设为false,就行了!
这个页面是通过url带参来查询数据的,其它不是通过url带参进行查询的页面不存该问题。
以下是网上的一段导出EXCEL代码:Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls");
string colHeaders = "", ls_item = ""; //定义表对象与行对象,同时用DataSet对其值进行初始化
System.Data.DataTable dt = ds.Tables[0];
DataRow[] myRow = dt.Select();//可以类似dt.Select("id>10")之形式达到数据筛选目的
int i = 0;
int cl = dt.Columns.Count; //取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符
for (i = 0; i < cl; i++)
{
if (i == (cl - 1))//最后一列,加n
{
colHeaders += dt.Columns[i].Caption.ToString() + "\n";
}
else
{
colHeaders += dt.Columns[i].Caption.ToString() + "\t";
} }
Response.Write(colHeaders);
//向HTTP输出流中写入取得的数据信息 //逐行处理数据
foreach (DataRow row in myRow)
{
//当前行数据写入HTTP输出流,并且置空ls_item以便下行数据
for (i = 0; i < cl; i++)
{
if (i == (cl - 1))//最后一列,加n
{
ls_item += row[i].ToString() + "\n";
}
else
{
ls_item += row[i].ToString() + "\t";
} }
Response.Write(ls_item);
ls_item = "";
}
Response.Flush();
Response.End();现在很郁闷,都不知道怎么回事?
private void CreateExcel(DataTable dt, string fileName)
{
HttpResponse resp;
resp = Page.Response;
resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
resp.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);
string colHeaders = "", ls_item = ""; ////定义表对象与行对象,同时用DataSet对其值进行初始化
//DataTable dt = ds.Tables[0];
DataRow[] myRow = dt.Select();//可以类似dt.Select("id>10")之形式达到数据筛选目的
int i = 0;
int cl = dt.Columns.Count; //取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符
for (i = 0; i < cl; i++)
{
if (i == (cl - 1))//最后一列,加n
{
colHeaders += dt.Columns[i].Caption.ToString() + "\n";
}
else
{
colHeaders += dt.Columns[i].Caption.ToString() + "\t";
} }
resp.Write(colHeaders);
//向HTTP输出流中写入取得的数据信息 //逐行处理数据
foreach (DataRow row in myRow)
{
//当前行数据写入HTTP输出流,并且置空ls_item以便下行数据
for (i = 0; i < cl; i++)
{
if (i == (cl - 1))//最后一列,加n
{
ls_item += row[i].ToString() + "\n";
}
else
{
ls_item += row[i].ToString() + "\t";
} }
resp.Write(ls_item);
ls_item = ""; }
resp.End();
}和你的代码差不多,这个就是将一个DataTable中的数据导出到Excel中。(可以使用这个,我在一个项目中就是用的这个)