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

最新重构源码下载:打造0代码全自动GridView-天具神力     
   
在web应用程序中,我们是不是很发愁打印问题,您是不是有过为了打印写Activex的经历,我们有没有想过,Word和Excel的打印功能能被我们利用起来呢?只要我们将我们将数据导出到Excel或者Word中,打印岂不是小case了么。下面就谈谈如何让GridView自己支持导出Excel和Word 。
    首先增加了两个属性,用于指示是否支持Excel导出和Word导出
 
  //增加了一个设置是否显示“导出Word”按钮的属性
        /// <summary>
        
/// 排序提示信息
        
/// </summary>

        [
        Description(
"显示导出到Word"),
        Category(
"扩展"),
         DefaultValue(
true)
        ]
        
public virtual bool ShowExportWord
        
{
            
get
            
{
                
object obj2 = this.ViewState["ShowExportWord"];
                
if (obj2 != null)
                
{
                    
return (bool)obj2;
                }

                
return true;
            }

            
set
            
{
                
bool aShowExportWord = this.ShowExportWord;
                
if (value != aShowExportWord)
                
{
                    
this.ViewState["ShowExportWord"= value;
                    
if (base.Initialized)
                    
{
                        
base.RequiresDataBinding = true;
                    }

                }

            }

        }

        
//增加了一个设置是否显示“导出Excel”按钮的属性
        [
       Description(
"显示导出到Excel"),
       Category(
"扩展"),
       DefaultValue(
true)
       ]
        
public virtual bool ShowExportExcel
        
{
            
get
            
{
                
object obj2 = this.ViewState["ShowExportExcel"];
                
if (obj2 != null)
                
{
                    
return (bool)obj2;
                }

                
return true;
            }

            
set
            
{
                
bool aShowExportExcel = this.ShowExportExcel;
                
if (value != aShowExportExcel)
                
{
                    
this.ViewState["ShowExportExcel"= value;
                    
if (base.Initialized)
                    
{
                        
base.RequiresDataBinding = true;
                    }

                }

            }

        }
声明两个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是多页的,那也会自动将全部数据(而不是当前页的数据)导出,而且会剔除原来数据中的一些超级链接。使用起来相当简单,效果页非常好。
上篇文章地址:
                         手把手教你如何扩展GridView之自带分页 
                         手把手教你如何扩展GridView之自带CheckBox
                         手把手教你如何扩展GridView之自动排序篇
作者:jillzhang
出处:http://jillzhang.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2007-06-10 19:10 Robin Zhang 阅读(6137) 评论(37) 编辑 收藏

 回复 引用   
#1楼 2007-06-10 19:16 小风[未注册用户]
不错,好东西,收藏了,另外,能不能继承GridView直接生成一个拥有这些功能的新GridView?
 回复 引用 查看   
#2楼[楼主] 2007-06-10 19:21 jillzhang      
@小风
这个就是,你看看
手把手教你如何扩展GridView之自动排序篇

 回复 引用 查看   
#3楼 2007-06-10 21:39 过江      
ding
 回复 引用   
#4楼 2007-06-10 23:22 yangzk[未注册用户]
[
Description("显示导出到Word"),
Category("扩展"),
DefaultValue(true)
]
这个需要引用什么空间?

 回复 引用 查看   
#5楼 2007-06-10 23:35 凯恩      
不错不错,这个东西其实大家应该手上都有,不过蛮少有想到共享出来的,支持一下你~!!
 回复 引用   
#6楼 2007-06-11 11:18 GSpring[未注册用户]
好东西
 回复 引用 查看   
#7楼[楼主] 2007-06-11 11:58 jillzhang      
@yangzk
using System.ComponentModel;

 回复 引用 查看   
#8楼[楼主] 2007-06-11 12:07 jillzhang      
@凯恩
@GSpring
多谢鼓励

 回复 引用   
#9楼 2007-06-11 13:41 Hellworld[未注册用户]
晕,能不能劳驾贴个源代码。
 回复 引用   
#10楼 2007-06-11 14:52 采采[未注册用户]
代码好多啊,头晕
 回复 引用   
#11楼 2007-06-11 15:34 xpengfee[未注册用户]
LZ能否好人做到底,把这个控件的源码发一下啊,我调试了半天,总是出错啊
xpengfee@163.com
谢谢!!!

 回复 引用   
#12楼 2007-06-12 10:46 salough[未注册用户]
有源代码就最好了.应该都有源代码下载的啊.
 回复 引用 查看   
#13楼[楼主] 2007-06-12 10:54 jillzhang      
@salough
源码是上述几个效果的得实现,放在最后一篇中

 回复 引用   
#14楼 2007-06-14 10:01 lilm[未注册用户]
最后一页在哪?
 回复 引用   
#15楼 2007-06-14 10:30 hnlyhjz@126.com[未注册用户]
最后一页在哪啊.我也找了好久没有见啊,能不能给个具体地址啊.谢谢了.
 回复 引用   
#16楼 2007-09-27 15:32 czf[未注册用户]
在 this.RenderControl(htmlWrite);时候,总是报以下错误
Control 'SmartGridView1' of type 'SmartGridView' must be placed inside a form tag with runat=server;
不知道为什么?

 回复 引用 查看   
#17楼 2007-10-11 08:00 韩现龙      
在 this.RenderControl(htmlWrite);时候,总是报以下错误
Control 'SmartGridView1' of type 'SmartGridView' must be placed inside a form tag with runat=server;
不知道为什么?

我也是。

 回复 引用 查看   
#18楼[楼主] 2007-10-11 08:49 jillzhang      
@韩现龙
在页面中重写
public override void VerifyRenderingInServerForm(Control control)
{

}

 回复 引用 查看   
#19楼 2007-10-11 17:54 韩现龙      
按照你的提示,我修改了一下,不过还是出现了其他的问题,兄弟能否把你扩展的几个控件的源给我发来一份?先行谢过!
如果可以的话,请发到hanxianlong888@163.com

 回复 引用 查看   
#20楼[楼主] 2007-10-11 18:15 jillzhang      
@韩现龙
已经发出,请注意查收

 回复 引用   
#21楼 2008-01-29 12:11 ljh[未注册用户]
好!!!
 回复 引用   
#22楼 2008-02-18 13:14 耐的寂寞[未注册用户]
我用你的扩展控件,但是导入到EXCEL是的时候,连同导入按钮导入到了EXCEL中了,如何不让导入按钮导入呢?同时,如果分页的话不能全部导入所有数据,而是只能导入当前页的数据
 回复 引用   
#24楼 2008-07-30 11:03 jianhui[未注册用户]
顶 真是我需要的啊
楼主能不能把源代码给我发邮箱一份啊
谢谢啊
jianhui_gao@126.com

 回复 引用   
#26楼 2008-09-08 12:56 ivw[未注册用户]
请问这个导出PDF能不能把当前HTML页面导出成PDF啊?具体怎样做啊?
 回复 引用   
#27楼 2008-11-14 11:11 sundart[未注册用户]
楼主,我的导出方法与你这个类似,但没你的完善;在DataGrid中没问题,可在GridView中老是提示:类型“GridView”的控件“gvBudgetDetail”必须放在具有 runat=server 的窗体标记内。
请帮助看一下,谢谢,
若可以,请将你的源码发我一份:sundart@163.com,谢谢

 回复 引用 查看   
#28楼 2008-11-27 09:53 徐.百川      
好东西 学习了
 回复 引用 查看   
#29楼 2010-06-04 16:23 xiaoliangaccp      
多谢楼主啊 对我们初级开发着有用啊

楼主能不能把源代码给我发邮箱一份啊
谢谢啊
xiaoliangaccp@126.com

 回复 引用 查看   
#30楼 2010-07-15 12:46 lidan0201      
楼主能不能把源码给我发一份呢,我也遇到这问题了,谢谢!

lidan0201@126.com

 回复 引用 查看   
#31楼 2011-03-08 21:17 Blues T      
楼主 我把你的grid 放UpDatePanel里到处报错啊 有好的解决方法没? 我的也没有Response.Write之类的东西啊