repeater嵌套repeater 导出成Excel 如图所示导出成excel,本人会导的都是一个datatable,这下不知道如何都导出来了,有做过的高人指点一下了,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /// <summary> /// 将DataTable 导出为EXCEL,并直接提供下载 /// </summary> /// <param name="ds">需要导处的DataTable</param> /// <param name="fileName">到处生成的文件名</param> /// public bool ExportExcelByDataTable(DataTable dt, string fileName) { try { HttpContext.Current.Response.Clear(); HttpContext.Current.Response.Charset = "utf-7"; HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-7"); HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"; StringWriter stringWrite = new StringWriter(); HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); DataGrid dg = new DataGrid(); dg.HeaderStyle.CssClass = "dgHead"; dg.DataSource = dt; dg.DataBind(); dg.RenderControl(htmlWrite); // GridView gv = new GridView(); // gv.HeaderStyle.CssClass = "gvHead"; // gv.DataSource = dt; // gv.DataBind(); // gv.RenderControl(htmlWrite); HttpContext.Current.Response.Write(stringWrite.ToString()); HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) + ".xls"); HttpContext.Current.Response.Charset = "gb2312"; HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); HttpContext.Current.Response.End(); return true; } catch { return false; } } //列表输出private void Export(string FileType, string FileName) { Response.Charset = "GB2312"; Response.ContentEncoding = System.Text.Encoding.UTF8; Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString()); Response.ContentType = FileType; this.EnableViewState = false; StringWriter tw = new StringWriter(); HtmlTextWriter hw = new HtmlTextWriter(tw); rpList.RenderControl(hw); //repeater Response.Write(tw.ToString()); Response.End(); }public override void VerifyRenderingInServerForm(Control control){} 调用的时候 Export("application/ms-excel", "XXXXX.xls"); 打开EXCEL模板导出excel Response.ContentEncoding = System.Text.Encoding.UTF7; Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString()); Response.ContentType = "application/ms-excel"; this.EnableViewState = false; StringWriter tw = new StringWriter(); HtmlTextWriter hw = new HtmlTextWriter(tw); rpt.RenderControl(hw); Response.Write(tw.ToString()); Response.End(); 导出成Excel文件,因为是repeater里面嵌套repeater,要导出的excel文件跟如图所示的格式差不多,楼上的说的我都试过了,都没达到要求,都不能导出我所要的 方法1:用office组件生产excel,//此代码基于vs2005下的vsto2005平台下的部分代码。 private void DataBind() { dbname = @"C:\Documents and Settings\xiangx\桌面\MTshapeUp.mdb"; string Dbname = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=" + dbname; OleDbConnection con = new OleDbConnection(Dbname); OleDbCommand com = new OleDbCommand("select * from T_MT_INFO_RULE"); try { con.Open(); com.CommandType = CommandType.Text; com.Connection = con; OleDbDataAdapter da = new OleDbDataAdapter(com); ds = new DataSet("Test"); da.Fill(ds); } catch { } finally { con.Close(); } DataTable dt = ds.Tables[0]; Excel.Worksheet ws = (Excel.Worksheet)Application.ActiveSheet; Excel.Range rng = ws.get_Range("A2","E3"); string [,]datasource = Tabletoarrays(dt);//使用二维数组对这个范围进行简单赋值。 rng.Value2 = datasource; Application.DisplayAlerts = false; GC.Collect(); } private string[,] Tabletoarrays(DataTable dt) { int tablerows = dt.Rows.Count; int tablecols = dt.Columns.Count; string[,] Arrays = new string[tablerows, tablecols]; for (int i = 0; i < tablerows; i++) { for (int j = 0; j < tablecols; j++) { Arrays[i, j] = Convert.ToString(dt.Rows[i][j]); } } return Arrays; }这个value指示的是简单邦定,还有对于Datasourse的复杂绑定,将在以后介绍。------------------------方法2:生成txt文本,用逗号分隔的格式化文本,做为cvs文件 导出EXCEL老出现乱码,不知道楼主遇到过没 protected void Btn_OutEXL_Click(object sender, EventArgs e) { DataBind_Infor(); string strDate1 = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss"); base.Response.Clear(); base.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); base.Response.AddHeader("content-disposition", "attachment;filename=工资统计表(" + strDate1.ToString() + ").xlsx"); base.Response.Charset = "gb2312";//gb2312,utf-8,UTF7 //base.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); //Response.ContentType指定文件类型 可以为application/ms-excel、application/ms-word、application/ms-txt、application/ms-html 或其他浏览器可直接支持文档 base.Response.ContentType = "application/vnd.xls"; this.EnableViewState = false; // 定义一个输入流 StringWriter writer = new StringWriter(); HtmlTextWriter Htmlwriter = new HtmlTextWriter(writer); this.Rpt_Makes.RenderControl(Htmlwriter); //this 表示输出本页,你也可以绑定datagrid,或其他支持obj.RenderControl()属性的控件 base.Response.Write(writer.ToString()); base.Response.End(); } 来看看这段代码到底错在哪里了?太奇怪估计很少人能看出来! aspx刷新页面错误 数据库查询问题 HttpWebResponse运行结果和IE直接执行不一样 向大家请一简单问题,我是刚学!asp.net 在asp页面里的代码转成.net的代码,急急!!! COM+应用程序问题 写asp.net系统时用到多线程了吗? 寻找源码(关于论坛的) 一个关于TreeView的问题 运行vs2010,Debug时发生“无法启动程序http://localhost: 找不到元素” 为什么每次获取最新版本会自动取消TFS绑定??
/// 将DataTable 导出为EXCEL,并直接提供下载
/// </summary>
/// <param name="ds">需要导处的DataTable</param>
/// <param name="fileName">到处生成的文件名</param>
///
public bool ExportExcelByDataTable(DataTable dt, string fileName)
{
try
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Charset = "utf-7";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-7"); HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
StringWriter stringWrite = new StringWriter();
HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
DataGrid dg = new DataGrid();
dg.HeaderStyle.CssClass = "dgHead";
dg.DataSource = dt;
dg.DataBind();
dg.RenderControl(htmlWrite);
// GridView gv = new GridView();
// gv.HeaderStyle.CssClass = "gvHead";
// gv.DataSource = dt;
// gv.DataBind();
// gv.RenderControl(htmlWrite);
HttpContext.Current.Response.Write(stringWrite.ToString());
HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) + ".xls");
HttpContext.Current.Response.Charset = "gb2312";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
HttpContext.Current.Response.End();
return true;
}
catch
{
return false;
}
}
private void Export(string FileType, string FileName)
{
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());
Response.ContentType = FileType;
this.EnableViewState = false;
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
rpList.RenderControl(hw); //repeater
Response.Write(tw.ToString());
Response.End();
}public override void VerifyRenderingInServerForm(Control control)
{
}
Response.ContentEncoding = System.Text.Encoding.UTF7;
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());
Response.ContentType = "application/ms-excel";
this.EnableViewState = false;
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
rpt.RenderControl(hw);
Response.Write(tw.ToString());
Response.End();
//此代码基于vs2005下的vsto2005平台下的部分代码。 private void DataBind()
{
dbname = @"C:\Documents and Settings\xiangx\桌面\MTshapeUp.mdb";
string Dbname = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=" + dbname;
OleDbConnection con = new OleDbConnection(Dbname);
OleDbCommand com = new OleDbCommand("select * from T_MT_INFO_RULE");
try
{
con.Open();
com.CommandType = CommandType.Text;
com.Connection = con;
OleDbDataAdapter da = new OleDbDataAdapter(com);
ds = new DataSet("Test");
da.Fill(ds);
}
catch
{
}
finally
{
con.Close();
}
DataTable dt = ds.Tables[0];
Excel.Worksheet ws = (Excel.Worksheet)Application.ActiveSheet;
Excel.Range rng = ws.get_Range("A2","E3"); string [,]datasource = Tabletoarrays(dt);//使用二维数组对这个范围进行简单赋值。 rng.Value2 = datasource; Application.DisplayAlerts = false;
GC.Collect();
} private string[,] Tabletoarrays(DataTable dt)
{
int tablerows = dt.Rows.Count;
int tablecols = dt.Columns.Count;
string[,] Arrays = new string[tablerows, tablecols];
for (int i = 0; i < tablerows; i++)
{
for (int j = 0; j < tablecols; j++)
{
Arrays[i, j] = Convert.ToString(dt.Rows[i][j]);
}
}
return Arrays;
}这个value指示的是简单邦定,还有对于Datasourse的复杂绑定,将在以后介绍。------------------------
方法2:生成txt文本,用逗号分隔的格式化文本,做为cvs文件
protected void Btn_OutEXL_Click(object sender, EventArgs e)
{
DataBind_Infor();
string strDate1 = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss");
base.Response.Clear();
base.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
base.Response.AddHeader("content-disposition", "attachment;filename=工资统计表(" + strDate1.ToString() + ").xlsx");
base.Response.Charset = "gb2312";//gb2312,utf-8,UTF7
//base.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
//Response.ContentType指定文件类型 可以为application/ms-excel、application/ms-word、application/ms-txt、application/ms-html 或其他浏览器可直接支持文档
base.Response.ContentType = "application/vnd.xls";
this.EnableViewState = false;
// 定义一个输入流
StringWriter writer = new StringWriter();
HtmlTextWriter Htmlwriter = new HtmlTextWriter(writer);
this.Rpt_Makes.RenderControl(Htmlwriter);
//this 表示输出本页,你也可以绑定datagrid,或其他支持obj.RenderControl()属性的控件
base.Response.Write(writer.ToString());
base.Response.End();
}