如何实现把DataGrid控件表中的数据自动导出到excel里呢?
请高手指点,谢谢
请高手指点,谢谢
解决方案 »
- GridView 按条件显示翻页出错
- (江湖救急!!!!)WindowsServer2008环境下的asp.net程序里调用Webservice 响应很慢,求解决
- 我该如何提高
- 可拖动GridView行排序
- 用VS2008如何新建和开发WAP网站?
- 就这20分了,还得问一个大家接触比较少的问题!!!
- 动态控件属性赋值
- 服务器发布网站,提示安全性异常错误,怎么解决啊?
- SELECT 语句中把一个字段付值给一个变量怎么写?(sql server)
- 急呀!在DataGrid中添加了一个删除按钮,为什么在CodeBehind后不能够访问该按钮?
- 在atlas框架使用文件上传功能为何不好使
- 投票:现在大家做网站是用VS + DW,还是notepad + DW?
{
HttpContext.Current.Response.Charset ="UTF-8";
HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.Default;
HttpContext.Current.Response.ContentType ="application/ms-excel";
HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename="+""+FileName+".xls");
ctl.Page.EnableViewState =false;
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
}
{
Response.Clear();
Response.Buffer= true;
Response.Charset="utf-8";
Response.AppendHeader("Content-Disposition","attachment;filename=FileName.xls");
Response.ContentEncoding=System.Text.Encoding.GetEncoding("utf-8");//设置输出流为简体中文
Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
this.EnableViewState = false;
System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN",true);
System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
this.DataGrid_bz.RenderControl(oHtmlTextWriter); //在此修改DataGrid_bz为你的控件名就可以了.
Response.Write(oStringWriter.ToString());
Response.End();
}
把DataGrid导出成Excel或者Word文档
private void Export(System.Web.UI.WebControls.DataGrid dg,string fileName,string typeName)
{
System.Web.HttpResponse httpResponse = Page.Response;
httpResponse.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8));
httpResponse.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
httpResponse.ContentType = typeName;
System.IO.StringWriter tw = new System.IO.StringWriter() ;
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);
dg.RenderControl(hw);
string filePath = Server.MapPath("..")+fileName;
System.IO.StreamWriter sw = System.IO.File.CreateText(filePath);
sw.Write(tw.ToString());
sw.Close();DownFile(httpResponse,fileName,filePath);
httpResponse.End();
}private bool DownFile(System.Web.HttpResponse Response,string fileName,string fullPath)
{
try
{
Response.ContentType = "application/octet-stream";Response.AppendHeader("Content-Disposition","attachment;filename=" +
HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8) + ";charset=GB2312");
System.IO.FileStream fs= System.IO.File.OpenRead(fullPath);
long fLen=fs.Length;
int size=102400;//每100K同时下载数据
byte[] readData = new byte[size];//指定缓冲区的大小
if(size>fLen)size=Convert.ToInt32(fLen);
long fPos=0;
bool isEnd=false;
while (!isEnd)
{
if((fPos+size)>fLen)
{
size=Convert.ToInt32(fLen-fPos);
readData = new byte[size];
isEnd=true;
}
fs.Read(readData, 0, size);//读入一个压缩块
Response.BinaryWrite(readData);
fPos+=size;
}
fs.Close();
System.IO.File.Delete(fullPath);
return true;
}
catch
{
return false;
}
}
private void btnWord_Click(object sender, System.EventArgs e)
{
Export(dataGrid,"FileName.doc","application/ms-word");}private void btnExcel_Click(object sender, System.EventArgs e)
{
Export(dataGrid,"FileName.xls","application/ms-excel");
}
--------------------------------------------------------------------------------类型“DataGridLinkButton”的控件“DataGrid__ctl14__ctl1”必须放在具有 runat=server 的窗体标记内。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Web.HttpException: 类型“DataGridLinkButton”的控件“DataGrid__ctl14__ctl1”必须放在具有 runat=server 的窗体标记内。源错误:
行 92: System.IO.StringWriter tw = new System.IO.StringWriter() ;
行 93: System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);
行 94: dg.RenderControl(hw);
行 95: string filePath = Server.MapPath("..")+fileName;
行 96: System.IO.StreamWriter sw = System.IO.File.CreateText(filePath);
源文件: c:\inetpub\wwwroot\managesystem\managesystem.aspx.cs 行: 94 堆栈跟踪:
[HttpException (0x80004005): 类型“DataGridLinkButton”的控件“DataGrid__ctl14__ctl1”必须放在具有 runat=server 的窗体标记内。]
System.Web.UI.Page.VerifyRenderingInServerForm(Control control)
System.Web.UI.WebControls.LinkButton.AddAttributesToRender(HtmlTextWriter writer)
System.Web.UI.WebControls.WebControl.RenderBeginTag(HtmlTextWriter writer)
System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer)
System.Web.UI.WebControls.DataGridLinkButton.Render(HtmlTextWriter writer)
System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
System.Web.UI.Control.Render(HtmlTextWriter writer)
System.Web.UI.WebControls.WebControl.RenderContents(HtmlTextWriter writer)
System.Web.UI.WebControls.TableCell.RenderContents(HtmlTextWriter writer)
System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer)
System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
System.Web.UI.Control.Render(HtmlTextWriter writer)
System.Web.UI.WebControls.WebControl.RenderContents(HtmlTextWriter writer)
System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer)
System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
System.Web.UI.WebControls.Table.RenderContents(HtmlTextWriter writer)
System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer)
System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
System.Web.UI.Control.Render(HtmlTextWriter writer)
System.Web.UI.WebControls.WebControl.RenderContents(HtmlTextWriter writer)
System.Web.UI.WebControls.BaseDataList.Render(HtmlTextWriter writer)
System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
ManageSystem.Index.Export(DataGrid dg, String fileName, String typeName) in c:\inetpub\wwwroot\managesystem\managesystem.aspx.cs:94
ManageSystem.Index.Button1_Click(Object sender, EventArgs e) in c:\inetpub\wwwroot\managesystem\managesystem.aspx.cs:83
System.Web.UI.WebControls.Button.OnClick(EventArgs e)
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain()
By azamsharp. http://www.codeproject.com/aspnet/DAtaGridExportToExcel.asp
你发的那段把DataGrid里的记录导出到excle的代码里:导出到excel里的记录一行太窄,怎样设置行的高度呢?谢谢!
{
Export(dataGrid,"FileName.xls","application/ms-excel");
}
如果用这种方法是不是需要先自己设置一个excel表
从DataGrid导出到Excel的数据列中是不是不能有按钮列啊,我一加按钮列就发生错误;如果不能有按钮列,那么用什么来实现选择一行记录的功能,谢谢!
下面是我的代码:
private void Export(System.Web.UI.WebControls.DataGrid dg,string fileName,string typeName)
{
System.Web.HttpResponse httpResponse = Page.Response;
httpResponse.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8));
httpResponse.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
httpResponse.ContentType = typeName;
System.IO.StringWriter tw = new System.IO.StringWriter() ;
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);
dg.RenderControl(hw);
string filePath = Server.MapPath("..")+fileName;
System.IO.StreamWriter sw = System.IO.File.CreateText(filePath);
sw.Write(tw.ToString());
sw.Close();DownFile(httpResponse,fileName,filePath);
httpResponse.End();
}private bool DownFile(System.Web.HttpResponse Response,string fileName,string fullPath)
{
try
{
Response.ContentType = "application/octet-stream";Response.AppendHeader("Content-Disposition","attachment;filename=" +
HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8) + ";charset=GB2312");
System.IO.FileStream fs= System.IO.File.OpenRead(fullPath);
long fLen=fs.Length;
int size=102400;//每100K同时下载数据
byte[] readData = new byte[size];//指定缓冲区的大小
if(size>fLen)size=Convert.ToInt32(fLen);
long fPos=0;
bool isEnd=false;
while (!isEnd)
{
if((fPos+size)>fLen)
{
size=Convert.ToInt32(fLen-fPos);
readData = new byte[size];
isEnd=true;
}
fs.Read(readData, 0, size);//读入一个压缩块
Response.BinaryWrite(readData);
fPos+=size;
}
fs.Close();
System.IO.File.Delete(fullPath);
return true;
}
catch
{
return false;
}
}
private void btnWord_Click(object sender, System.EventArgs e)
{
Export(dataGrid,"FileName.doc","application/ms-word");}private void btnExcel_Click(object sender, System.EventArgs e)
{
Export(dataGrid,"FileName.xls","application/ms-excel");
}