读者问与答

原发问问题:
 
章老师 :
 
自从 ASP .NET 拜读老师大作受益良多,由 Visual C# 2005 大作发现了 EXCEL 资料连线方式,然而在 ASP.NET 方面如何处理 EXCEL 却发现了下述问题。
 
ASP.NET C# GridView 转换为 Excel ,发现 EXCEL 笔数只要超过 38 笔,就会显示『无法读取档案』,请问是为何 ? 造成 EXCEL 档无法开启,但是用纯 GridView 显示资料却正常。
 
DataSet myDataSet = new DataSet();
............................................................
 
.............................................................
 
GridView1.DataSource = myDataSet.Tables["tb"];
GridView1.DataBind();
 
Response.AddHeader("content-disposition", "attachment; filename= "a.xls");
Response.ContentType = "application/vnd.ms-excel";
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
GridView1.RenderControl(hw);
Response.Write(tw.ToString());
Response.End();
 
亲爱的 amicky 读者,您好
 
很感谢您对于章立民研究室的支持,有关于您提到的问题,回复如下:
 
首先,要说明的是如何连结至 Excel 档案。图表 1 所示者是网页范例的设计画面,从画面中可以清楚的看到, GridView 控制项使用 SqlDataSource 控制项来连结至 Excel 档案:
图表 1
 
在新增 GridView 控制项的资料连结时,请按下「加入连接」对话方块的「变更连结」按钮,然后如图表 2 所示,选取「资料提供者」下拉式清单的 .NET Framework Data Provider for OLE DB 项目,按下「确定」按钮回到「加入连结」对话方块:
图表 2
 
请如图表 3 所示,选取 OLE DB 提供者」 下拉式清单的 Microsoft Jet 4.0 OLE DB Prodiver 项目,并按下「资料连结」按钮:
图表 3
 
请于「资料连结内容」对话方块中,选取作为资料来源的 Excel 档案之后,按下「确定」按钮回到「加入连接」对话方块,如图表 4 所示:
图表 4
 
请按下「加入连接」对话方块中的「进阶」按钮,将「进阶属性」对话方块的 Extended Properties 属性设定为 Excel 8.0 ,完成之后按下「确定」按钮,回到「加入连接」对话方块,如图表 5 所示:
图表 5
 
接下来,请自行依照「加入连接」对话方块的提示,继续完成新增 GridView 控制项之资料连结的作业。
 
加入资料连结之后,我们在画面上配置了一个 Button 控制项,以便当使用者用滑鼠按一下按钮时,会将目前 GridView 控制项的资料写出,产生 Excel 档案,请替 Button 控制项的 Click 事件处理常式撰写如下所示的程式码:
 
protected void Button1_Click(object sender, EventArgs e)
{
 System.IO.StringWriter tw = new System.IO.StringWriter();
 HtmlTextWriter hw = new HtmlTextWriter(tw);
 string excelFileName = " 测试 Excel 档案 .xls" ;
 
 Context.Response.ContentType = "application/x-excel";
 Context.Response.AddHeader("content-disposition", "attachment;filename=" +
   Server.UrlEncode(excelFileName));
 this.GridView1.RenderControl(hw);
 Context.Response.Write(tw.ToString());
 Context.Response.End();
}
 
请覆写 VerifyRenderingInServerForm 方法,以便让使用者能够下载 Excel 档案,如下所示:
 
public override void VerifyRenderingInServerForm(Control control)
{
 
}
 
请替 GridView 控制项的 RowDataBound 事件处理常式撰写如下所示的程式码,以便让 GridView 控制项每列资料的第一个栏位能够显示该笔资料的资料编号:
 
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
 // 如果系结的资料列不是 GridView 控制项的页首,
 // 则将资料列第一个栏位之 Label 控制项的文字设定为「资料列数加 1 」,
 // 以便代表资料编号。
 if (e.Row.RowType != DataControlRowType.Header)
 {
  e.Row.Cells[0].Text = (e.Row.RowIndex + 1).ToString();
 }
}

 
网页范例的执行结果如图表 6 所示,请用滑鼠按一下「产生 Excel 按钮,以便将目前 GridView 控制项的内容写入 Excel 档案,并开始下载,如图表 7 所示:
                                        图表6
图表 7
 
最后,测试 Excel 档案 .xls 档案的内容如图表 8 所示,大家会发现资料的内容正好与 GirdView 控制项的内容相符,而这也是我们希望的结果:
                                        图表8

本文出自 “章立民” 博客,转载请与作者联系!

你可能感兴趣的:(职场,C#,asp.net,休闲,Visual)