GridView中的数据导出到Excel,可以在后台使用一个无分页的Gridview作为导出源,程序例:
先准备一个GridView和一个Button
<
table
>
< tr >
< td >
< asp:GridView ID = " GridView1 " runat = " server " AutoGenerateColumns = " false " PageSize = " 30 " AllowPaging = " True " OnPageIndexChanging = " GridView1_PageIndexChanging " >
< Columns >
< asp:TemplateField HeaderText = " 手机号码 " >
< ItemTemplate >
< asp:Label ID = " Phone " runat = " server " Text = ' <% #Eval("Account_Phone") %> ' ></ asp:Label >
</ ItemTemplate >
</ asp:TemplateField >
< asp:TemplateField HeaderText = " 产品代码 " >
< ItemTemplate >
< asp:Label ID = " Goods " runat = " server " Text = ' <% #Eval("Account_Goods") %> ' ></ asp:Label >
</ ItemTemplate >
</ asp:TemplateField >
< asp:TemplateField HeaderText = " 出账日期 " >
< ItemTemplate >
< asp:Label ID = " Time " runat = " server " Text = ' <% #Eval("Account_Time") %> ' ></ asp:Label >
</ ItemTemplate >
</ asp:TemplateField >
< asp:TemplateField HeaderText = " 产品金额 " >
< ItemTemplate >
< asp:Label ID = " Count " runat = " server " Text = ' <% #Eval("Account_Count") %> ' ></ asp:Label >
</ ItemTemplate >
</ asp:TemplateField >
< asp:TemplateField HeaderText = " 交易结果 " >
< ItemTemplate >
< asp:Label ID = " Result " runat = " server " Text = ' <% #Eval("Account_Result") %> ' ></ asp:Label >
</ ItemTemplate >
</ asp:TemplateField >
</ Columns >
</ asp:GridView >
</ td >
</ tr >
< tr >
< td >
< asp:Button ID = " OutBtn " runat = " server " Text = " 导出到Excel " OnClick = " OutBtn_Click " />
</ td >
</ tr >
</ table >
< tr >
< td >
< asp:GridView ID = " GridView1 " runat = " server " AutoGenerateColumns = " false " PageSize = " 30 " AllowPaging = " True " OnPageIndexChanging = " GridView1_PageIndexChanging " >
< Columns >
< asp:TemplateField HeaderText = " 手机号码 " >
< ItemTemplate >
< asp:Label ID = " Phone " runat = " server " Text = ' <% #Eval("Account_Phone") %> ' ></ asp:Label >
</ ItemTemplate >
</ asp:TemplateField >
< asp:TemplateField HeaderText = " 产品代码 " >
< ItemTemplate >
< asp:Label ID = " Goods " runat = " server " Text = ' <% #Eval("Account_Goods") %> ' ></ asp:Label >
</ ItemTemplate >
</ asp:TemplateField >
< asp:TemplateField HeaderText = " 出账日期 " >
< ItemTemplate >
< asp:Label ID = " Time " runat = " server " Text = ' <% #Eval("Account_Time") %> ' ></ asp:Label >
</ ItemTemplate >
</ asp:TemplateField >
< asp:TemplateField HeaderText = " 产品金额 " >
< ItemTemplate >
< asp:Label ID = " Count " runat = " server " Text = ' <% #Eval("Account_Count") %> ' ></ asp:Label >
</ ItemTemplate >
</ asp:TemplateField >
< asp:TemplateField HeaderText = " 交易结果 " >
< ItemTemplate >
< asp:Label ID = " Result " runat = " server " Text = ' <% #Eval("Account_Result") %> ' ></ asp:Label >
</ ItemTemplate >
</ asp:TemplateField >
</ Columns >
</ asp:GridView >
</ td >
</ tr >
< tr >
< td >
< asp:Button ID = " OutBtn " runat = " server " Text = " 导出到Excel " OnClick = " OutBtn_Click " />
</ td >
</ tr >
</ table >
然后做DataBind(),数据源是DT,我把它设置为STATIC的,这是运行效果:
我们看看OutBtn_Click的处理:
HttpContext curContext
=
System.Web.HttpContext.Current;
System.IO.StringWriter strWriter = new StringWriter();
System.Web.UI.HtmlTextWriter htmlWriter = new HtmlTextWriter(strWriter);
curContext.Response.ContentType = " application/vnd.ms-excel " ;
curContext.Response.ContentEncoding = Encoding.GetEncoding( " GB2312 " );
curContext.Response.Charset = " GB2312 " ;
GridView GV = new GridView(); // 一个无分页的GridView
GV.DataSource = DT;
GV.AllowPaging = false ;
GV.DataBind();
GV.RenderControl(htmlWriter);
curContext.Response.Write(strWriter.ToString());
curContext.Response.End();
System.IO.StringWriter strWriter = new StringWriter();
System.Web.UI.HtmlTextWriter htmlWriter = new HtmlTextWriter(strWriter);
curContext.Response.ContentType = " application/vnd.ms-excel " ;
curContext.Response.ContentEncoding = Encoding.GetEncoding( " GB2312 " );
curContext.Response.Charset = " GB2312 " ;
GridView GV = new GridView(); // 一个无分页的GridView
GV.DataSource = DT;
GV.AllowPaging = false ;
GV.DataBind();
GV.RenderControl(htmlWriter);
curContext.Response.Write(strWriter.ToString());
curContext.Response.End();
然后,就可以测试了,点击Btn就可以把你的GridView导出为你本地的Excel,注意,导出的Excel中的列名为DT中列名,如果需要用更有意义的名字,可以自己再一个DataTable,然后rename那些Columns,这是测试后保存出的Excel文件:
其中,设置AllowPaging=false是为了把Gridview的整个数据都导出,
当然,反过来就可以实现局部导出,就不废话了