.Net储物箱

------海纳百川,厚积薄发
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

手把手教你如何扩展GridView之自带Excel和Word导出

Posted on 2007-07-03 15:28  Davi.Wang  阅读(242)  评论(0)    收藏  举报
[转自:http://www.cnblogs.com/jillzhang/archive/2007/06/10/778393.html]
在web应用程序中,我们是不是很发愁打印问题,您是不是有过为了打印写Activex的经历,我们有没有想过,Word和Excel的打印功能能被我们利用起来呢?只要我们将我们将数据导出到Excel或者Word中,打印岂不是小case了么。下面就谈谈如何让GridView自己支持导出Excel和Word 。
    首先增加了两个属性,用于指示是否支持Excel导出和Word导出
 
  //增加了一个设置是否显示“导出Word”按钮的属性
        /**/
        [
        Description(
"显示导出到Word"),
        Category(
"扩展"),
         DefaultValue(
true)
        ]
        
public virtual bool ShowExportWord
        

        
//增加了一个设置是否显示“导出Excel”按钮的属性
        [
       Description(
"显示导出到Excel"),
       Category(
"扩展"),
       DefaultValue(
true)
       ]
        
public virtual bool ShowExportExcel
        
声明两个LinkButton控件btnExportWord,btnExport,分别用于点击导出Excel和点击导出word,并在控件的OnInit事件中初始化两个控件
声明两个LinkButton,并在控件的OnInit中初始化

将两个LinkButton添加到GridView子控件中。
 protected override int CreateChildControls(System.Collections.IEnumerable dataSource, bool dataBinding) {
            
int res = base.CreateChildControls(dataSource, dataBinding);
                
try
                
{
                    GridViewRow row 
= new GridViewRow(00, DataControlRowType.Pager, DataControlRowState.Normal);  TableCell cell2 = new TableCell();
                    cell2.HorizontalAlign 
= HorizontalAlign.Right;
                    cell2.Wrap 
= falseif (this.ShowExportExcel == true)
                    
{
                        l1 
= new Literal();
                        l1.Text 
= " [";
                        cell2.Controls.Add(l1);
                        cell2.Controls.Add(btnExport);
                        l1 
= new Literal();
                        l1.Text 
= "";
                        cell2.Controls.Add(l1);
                    }


                    
if (this.ShowExportWord == true)
                    
{
                        l1 
= new Literal();
                        l1.Text 
= " [";
                        cell2.Controls.Add(l1);
                        cell2.Controls.Add(btnExportWord);
                        l1 
= new Literal();
                        l1.Text 
= "";
                        cell2.Controls.Add(l1);
                    }
 r.Cells.Add(cell2);
                    
this.Controls[0].Controls.AddAt(0, row);
                }

                
catch
                
{
                }

            }

            
return res;
        }
在导出的时候,我们希望一些列不被导出,如修改,删除这样的列,因此我们添加了这样的一个属性
用于指定不被导出列,列名之间用,隔开
在导出的时候,原来的GridView列表中会有一些LinkButton或者DropDownList控件,导出的时候,我们也希望将其换成纯文本,用下面这个函数可以完成这个目的
用于将GridView中的LinkButton和DropDownList转换成文本的方法
下面是处理ItemCommand,将GridView导出的代码
处理OnRowCommand事件,将GridView数据导出到Excel和Word

使用的时候,只要指定ShowExportExcel=True,ShowExportWord=True就自动出现导出Word和导出Excel的按钮了,点击自动会将GridView中的数据导出到Word或者Excel中了,如果原GridView是多页的,那也会自动将全部数据(而不是当前页的数据)导出,而且会剔除原来数据中的一些超级链接。使用起来相当简单,效果页非常好。