彩票走势图

ExtAspNet应用技巧(九) - Grid导出为Excel文件

原创|其它|编辑:郝浩|2009-08-24 10:20:20.000|阅读 914 次

概述:这个其实是开发中经常遇到的问题,大家也都知道其实所谓导出到Excel文件,最简单的做法就是把一个table的HTML片段输出,下面通过一个简单的例子来说明这个问题。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

前言

最近有网友提到这个,就是如何将页面中的Grid控件导出到Excel文件。

这个其实是开发中经常遇到的问题,大家也都知道其实所谓导出到Excel文件,最简单的做法就是把一个table的HTML片段输出,下面通过一个简单的例子来说明这个问题。

1. 新建一个文本文件table.txt,编辑其内容:

1.<table border="1">
2. <tr><th>姓名</th><th>性别</th></tr>
3. <tr><th>张三</th><th>男</th></tr>
4. <tr><th>李四</th><th>男</th></tr>
5. <tr><th>春花</th><th>女</th></tr>
6.</table>


2. 修改文件名为table.xls,双击打开此文件: 




Asp.Net中GridView的实现

在写这篇文章之前,我在网上找到一个很好的,还有。

总的来说还是有一些应用技巧的,大概归纳如下:

  • 必须重载VerifyRenderingInServerForm函数,函数体留空,否则会报错: 
  • 如果GridView中包含CheckBox,LinkButton等控件或者分页时,需要设置Page属性EnableEventValidation="false",否则会报错: 
  • 可以在导出数据之前将GridView中的CheckBox等控件使用Literal控件代替,这个会在下面的例子中有演示。



下面通过一个例子来说明。
1. 页面中GridView的声明:

01.<asp:GridView ID="GridView1" Width="900px" DataKeyNames="Id" AutoGenerateColumns="False"
02.    runat="server">
03.    <Columns>
04.        <asp:BoundField DataField="MyText" HeaderText="MyText" />
05.        <asp:BoundField DataField="MyValue" HeaderText="MyValue" />
06.        <asp:BoundField DataField="Year" HeaderText="Year" />
07.        <asp:CheckBoxField DataField="MyCheckBox" HeaderText="CheckBox" />
08.        <asp:HyperLinkField HeaderText="HyperLink" DataTextField="MyText" DataTextFormatString="F-{0}"
09.            DataNavigateUrlFields="Id,MyValue" DataNavigateUrlFormatString="{0}&page={1}"
10.            Target="_blank" NavigateUrl="~/alert.aspx" Text="HyperLinkField" />
11.        <asp:TemplateField HeaderText="TemplateField">
12.            <ItemTemplate>
13.                <asp:Label ID="Label2" runat="server" Text='<%# GetMyValue(Eval("MyValue")) %>'></asp:Label>
14.            </ItemTemplate>
15.        </asp:TemplateField>
16.        <asp:ImageField DataImageUrlField="MyValue" DataImageUrlFormatString="~/images/16/{0}.gif"
17.            HeaderText="Image">
18.        </asp:ImageField>
19.    </Columns>
20.</asp:GridView>


2. 后台数据绑定,这个就不贴代码了,看看生成的页面就明白了。

3. 生成的页面: 


4. 点击导出为Excel文件的C#代码:

01.protected void Button2_Click(object sender, EventArgs e)
02.{
03.    Response.ClearContent();
04.    Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls");
05.    Response.ContentType = "application/excel";
06.    StringWriter sw = new StringWriter();
07.    HtmlTextWriter htw = new HtmlTextWriter(sw);
08.    GridView1.RenderControl(htw);
09.    Response.Write(sw.ToString());
10.    Response.End();
11.}



5. 看下导出的Excel: 


6. 如果打开生成的MyExcelFile.xls,你会发现如下内容,其实就是HTML表示的Table: 




Asp.Net中GridView的实现 - 去除CheckBox控件和修正图片链接

在上面的实现中,有两个地方另我们不满意,一个是希望去掉CheckBox控件使用文本表示,二是图片的路径是相对当前站点的,希望能够以http开头的路径,这样在Excel才能正常显示。

因此在输出GridView之前,对GridView做一些手脚如下:

01.protected void Button2_Click(object sender, EventArgs e)
02.{
03.    ResolveGridView(GridView1);
04.    Response.ClearContent();
05.    Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls");
06.    Response.ContentType = "application/excel";
07.    StringWriter sw = new StringWriter();
08.    HtmlTextWriter htw = new HtmlTextWriter(sw);
09.    GridView1.RenderControl(htw);
10.    Response.Write(sw.ToString());
11.    Response.End();
12.}
13.private void ResolveGridView(Control ctrl)
14.{
15.    for (int i = 0; i < ctrl.Controls.Count; i++)
16.    {
17.        // 图片的完整URL
18.        if (ctrl.Controls[i].GetType() == typeof(AspNet.Image))
19.        {
20.            AspNet.Image img = ctrl.Controls[i] as AspNet.Image;
21.            // 其中URL的前半段应该是Web.config中配置的参数
22.            img.ImageUrl = "" + Page.ResolveUrl(img.ImageUrl);
23.        }
24.        // 将CheckBox控件转化为静态文本
25.        if (ctrl.Controls[i].GetType() == typeof(AspNet.CheckBox))
26.        {
27.            Literal lit = new Literal();
28.            lit.Text = (ctrl.Controls[i] as AspNet.CheckBox).Checked ? "√" : "×";
29.            ctrl.Controls.RemoveAt(i);
30.            ctrl.Controls.AddAt(i, lit);
31.        }
32.        if (ctrl.Controls[i].HasControls())
33.        {
34.            ResolveGridView(ctrl.Controls[i]);
35.        }
36.    }
37.}



现在的结果还不错: 



全部源代码可以从,随后的一篇文章我会讲解如何将ExtAspNet中的Grid控件导出为Excel文件。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:博客园

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP