把GRIDVIEW 输出到 Excel 中。

cn_sdh 2007-04-20 04:26:34
protected void Button1_Click(object sender, EventArgs e)
{
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls");
// 如果设置为 GetEncoding("GB2312");导出的文件将会出现乱码!!!
Response.ContentEncoding = System.Text.Encoding.UTF7;
Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
this.GridView1.RenderControl(oHtmlTextWriter);
Response.Output.Write(oStringWriter.ToString());
Response.Flush();
Response.End();

}
public override void VerifyRenderingInServerForm(Control control)
{ }

上面这个能输出,如果 有分页就只能输出当前页,请问题怎么解决啊。
...全文
379 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
iloveaspx 2007-05-09
  • 打赏
  • 举报
回复
http://www.51aspx.com/CV/GridViewDemo
ssy888 2007-05-09
  • 打赏
  • 举报
回复
出发导出事件时候把查询数据重新放一个不分页的gridview,把原来的隐藏掉,然后导出.
Arieslns 2007-05-09
  • 打赏
  • 举报
回复
mark
egooh 2007-05-09
  • 打赏
  • 举报
回复
其实就一句话吧,临时放大pagesize的值。我就这么实现的,按我上面的代码100%可以实现,我是用存储过程分页的,开始和斑竹遇到一样的疑惑,后来解决了。
egooh 2007-05-09
  • 打赏
  • 举报
回复
我以前也遇到类似问题了,不过其实就几句话就可以把问题解决了,把代码奉献给你。我用VB。NET的,你看看我中间那部分就知道了。
‘EXCEL
Protected Sub Button5_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button5.Click
' EnableViewState = False
Export("application/ms-excel", "便民服务机构信息表.xls")

End Sub
Private Sub Export(ByVal FileType As String, ByVal FileName As String)
Response.Charset = "GB2312"
Response.ContentEncoding = System.Text.Encoding.UTF7
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString())
Response.ContentType = FileType
Me.EnableViewState = False
’这个地方你要把PageSize临时放大,我是定义为60000条,再多点EXCEL也不能支持了
GridView1.PageSize = "60000"
‘重新棒定数据
DataBindDg(1)
Dim tw As New System.IO.StringWriter()
Dim hw As New HtmlTextWriter(tw)
GridView1.RenderControl(hw)
Response.Write(tw.ToString())
Response.End()
’结束后再把PageSize定义为原来的设置,然后重新绑定数据,此过程看不出刷新数据的
GridView1.PageSize = "20"
DataBindDg2(1)
End Sub 'Export

'如果没有下面方法会报错类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内
Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
End Sub 'VerifyRenderingInServerForm

Protected Sub Button6_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button6.Click
Export("application/ms-word", "便民服务机构信息表.doc")
End Sub
it36524 2007-05-09
  • 打赏
  • 举报
回复
你可以在点击 导出 时调用另一个页面,将查询条件传递过去,在弹出页面的Gridview禁用分页功能,然后再真正导出EXCEL。
senxp 2007-04-23
  • 打赏
  • 举报
回复
做个虚的Gridview 好了
cn_sdh 2007-04-23
  • 打赏
  • 举报
回复
up
cn_sdh 2007-04-23
  • 打赏
  • 举报
回复
还有没有别的办法,让查询出来的数据全部输出到Excel中 ,但Gridview 要有分页。
孟子E章 2007-04-23
  • 打赏
  • 举报
回复
只能输出当前页?
你要理解GridView导出Excel的原理,
当前页就一页数据,当然是导出当前页的了

你要全部导出,做个不分页的GridView。
cn_sdh 2007-04-23
  • 打赏
  • 举报
回复
谢谢啊,高人指典,急急啊! 本人一定多给分。
suqx520 2007-04-23
  • 打赏
  • 举报
回复
没碰到过,帮你UP一下
cn_sdh 2007-04-23
  • 打赏
  • 举报
回复
怎么没有人回答啊,难道大家没有遇到过这个问题吗?
happyf101 2007-04-22
  • 打赏
  • 举报
回复
我顶 顶顶顶顶
cn_sdh 2007-04-21
  • 打赏
  • 举报
回复
我这个主要是因为我的GRIDVIEW 有页,但只能输出当前页,这个问题怎么解决.高人指典.
ojekleen 2007-04-20
  • 打赏
  • 举报
回复
输出datatable
suiqirui19872005 2007-04-20
  • 打赏
  • 举报
回复


<%@ Page language="c#" Codebehind="OutExcel.aspx.cs" AutoEventWireup="false" Inherits="eMeng.Exam.OutPutExcel" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>OutPutExcel</title>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<asp:datagrid id="DataGrid1" runat="server">
<Columns>
<asp:BoundColumn></asp:BoundColumn>
</Columns>
</asp:datagrid>
<P>
<asp:Label id="Label1" runat="server">文件名:</asp:Label>
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
<asp:button id="Button1" runat="server" Text="输出到Excel"></asp:button></P>
</form>
</body>
</HTML>

接下来是cs页面里的代码

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

namespace eMeng.Exam
{
/// <summary>
/// OutPutExcel 的摘要说明。
/// </summary>
public class OutPutExcel : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
protected System.Web.UI.WebControls.TextBox TextBox1;
protected System.Web.UI.WebControls.Label Label1;
private DataSet myDS =new DataSet();

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
Data_Load();//调用方法填充表格
}

}
/// <summary>
/// 创建数据源
/// </summary>
/// <returns>DataView</returns>
private void Data_Load()
{
//数据库连接字符串Catalog为指定的数据库名称,DataSource为要连接的SQL服务器名称
string myConn ="User Id=sa;Password=sa;Initial Catalog=test;Data Source=zxb;Connect Timeout=20";
//查询字符串
string mySQLstr="SELECT * FROM fy";
//连接数据库操作
SqlConnection myConnection = new SqlConnection(myConn);
//执行SQL语句操作
SqlDataAdapter myDataAdapter = new SqlDataAdapter(mySQLstr,myConnection);
//打开数据库
myConnection.Open();
//向DataSet填充数据,填充数据库服务器中test库中的fy表
myDataAdapter.Fill(myDS,"fy");
//向DastaGrid填充数据
DataGrid1.DataSource=myDS;
DataGrid1.DataBind();
}
/// <summary>
/// 输出到Excel
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button1_Click(object sender, System.EventArgs e)
{
if(TextBox1.Text=="")
{
Response.Write("<SCRIPT language=javascript>");
Response.Write("window.alert('请输入文件名');");
Response.Write("</SCRIPT>");
}
else
{
Response.Clear();
Response.Buffer= true;
Response.Charset="GB2312"; //设置了类型为中文防止乱码的出现
Response.AppendHeader("Content-Disposition","attachment;filename="+TextBox1.Text+".xls"); //定义输出文件和文件名
Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
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.DataGrid1.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
}
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Cells[0].Attributes.Add("style","vnd.ms-excel.numberformat:@");
e.Item.Cells[3].Attributes.Add("style","vnd.ms-excel.numberformat:¥#,###.00");
}
}
}
}
jimu8130 2007-04-20
  • 打赏
  • 举报
回复
那就看能不能用数据集导出成excel, 你看下这个
http://www.cnblogs.com/myrat/archive/2004/07/07/22079.aspx
http://www.cnblogs.com/Meyer/archive/2004/04/21/6977.aspx
http://www.cnblogs.com/lingyun_k/archive/2005/11/07/271068.html http://www.cnblogs.com/iCeSnaker/archive/2004/04/22/7272.aspx
http://www.cnblogs.com/iCeSnaker/archive/2004/04/22/7273.aspx
cn_sdh 2007-04-20
  • 打赏
  • 举报
回复
还有没有其它办法啊。
  • 打赏
  • 举报
回复
取你要的数字放datatable里直接搞定

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧