读者问与答

原发问问题:

 

章老师:

 

自从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

posted on 2007-04-24 10:56  章立民研究室  阅读(2078)  评论(3编辑  收藏  举报

导航