All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
SQL,Server的有效安装_mssql学习_编程技术
C#教程:开发UDP聊天程序使用实例
C#教程:注册表概述
HTML 初学者指南(3)_[Html教程]
XMLHttpRequest在Web开发利弊_[XML教程]
SQL Server2005SQLCLR代码安全之权限_[SQL Server教程]
MySQL处理同时存在order,by,和,limit,语句时出现的bug_mssql学习_编程技术
PHP日期和时间函数使用技巧实例_[PHP教程]
session简要用法实例_[Asp.Net教程]
在ASP.NET,Atlas中创建自定义Behavior_[Asp.Net教程]
Reading number is top 10 pictures
泳装名模阿尔贝特妮写真2
9.3阅兵全景图4-陸海空现代化兵种方阵梯队
这玉米,买还是不卖?
青涩甜美-王祖贤小时候的旧照片曝光
Look for from human art net, is good1
From China fortress sora aoi1
怀春少女-石一伊
乳娘帕梅拉安德森5
大四女生借债隆胸成功
XuRe xuan cool and refreshing photoes1
Download software ranking
Tram sex maniac 2 (H) rar bag14
Boxer Classic video3
致我们终将逝去的青春
尖东毒玫瑰A
Eclipse 4.2.2 For Win32
JSP+Ajax Web development typical examples
The Bermuda triangle3
株洲本地在线棋牌游戏
打鸟视频
天龙八部十二宫服务端
delv published in(发表于) 2014/1/16 9:33:22 Edit(编辑)
扩展GridView控件(八)——导出为Excel_[Asp.Net教程]

扩展GridView控件(八)——导出为Excel_[Asp.Net教程]

扩展GridView控件(八)——导出为Excel_[Asp.Net教程]

GridView既强大又好用。为了让它更强大、更好用,我们来写一个继承自GridView的控件。
[源码下载]
http://files.cnblogs.com/webabcd/yycontrols.rar



介绍
把GridView导出为一个Excel文件算是一个经常要用到的功能,也比较简单,我们来扩展一个GridView以实现这样的功能。


控件开发
1、新建一个继承自GridView的类。
复制C#代码保存代码///


/// 继承自GridView
///

[ToolboxData(@"<{0}:SmartGridView runat='server'>")]
public class SmartGridView : GridView
{
}
2、重写OnRowCommand,以实现把GridView导出为Excel的功能
复制C#代码保存代码///
/// OnRowCommand
///

///
protected override void OnRowCommand(GridViewCommandEventArgs e)
{
if (e.CommandName.ToLower() == "exporttoexcel")
{
System.Web.HttpContext.Current.Response.ClearContent();
// e.CommandArgument用“;”隔开两部分,左边的部分为导出Excel的文件名称
System.Web.HttpContext.Current.Response.AddHeader("content-disposition",
"attachment; filename=" + e.CommandArgument.ToString().Split(';')[0] + ".xls");
System.Web.HttpContext.Current.Response.ContentType = "application/excel";


System.IO.StringWriter sw = new System.IO.StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);


// e.CommandArgument用“;”隔开两部分,右边的部分为需要隐藏的列的索引(列索引用“,”分开)
if (e.CommandArgument.ToString().Split(';').Length > 1)
{
foreach (string s in e.CommandArgument.ToString().Split(';')[1].Split(','))
{
int i;


if (!Int32.TryParse(s, out i))
{
throw new ArgumentException("需要隐藏的列的索引不是整数");
}


if (i > this.Columns.Count)
{
throw new ArgumentOutOfRangeException("需要隐藏的列的索引超出范围");
}


this.Columns[i].Visible = false;
}
}


// 隐藏“导出Excel”按钮
((Control) e.CommandSource).Visible = false;


// 如果HeaderRow里的控件是button的话,则把它替换成文本
foreach (TableCell tc in this.HeaderRow.Cells)
{
// TableCell里的每个Control
foreach (Control c in tc.Controls)
{
// 如果控件继承自接口IButtonControl
if (c.GetType().GetInterface("IButtonControl") != null
&& c.GetType().GetInterface("IButtonControl").Equals(typeof(IButtonControl)))
{
// 如果该控件不是“导出Excel”按钮则把button转换成文本
if (!c.Equals(e.CommandSource))
{
tc.Controls.Clear();
tc.Text = ((IButtonControl) c).Text;
}
}
}
}


// 将服务器控件的内容输出到所提供的 System.Web.UI.HtmlTextWriter 对象中
this.RenderControl(htw);


System.Web.HttpContext.Current.Response.Write(sw.ToString());
System.Web.HttpContext.Current.Response.End();
}


base.OnRowCommand(e);
}


控件使用
添加这个控件到工具箱里,然后拖拽到webform上,在GridView内加一个按钮,把CommandName属性设置为“ExportToExcel”,CommandArgument属性的值用“;”做分隔符分为两部分,左边的部分为导出Excel的文件名称,右边的部分为需要隐藏的列的索引(列索引用“,”分开)
ObjData.cs
复制C#代码保存代码using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.ComponentModel;


///


/// OjbData 的摘要说明
///

public class OjbData
{
public OjbData()
{
//
// TOD 在此处添加构造函数逻辑
//
}


[DataObjectMethod(DataObjectMethodType.Select, true)]
public DataTable Select()
{
DataTable dt = new DataTable();
dt.Columns.Add("no", typeof(string));
dt.Columns.Add("name", typeof(string));


for (int i = 0; i < 30; i++)
{
DataRow dr = dt.NewRow();
dr[0] = "no" + i.ToString().PadLeft(2, '0');
dr[1] = "name" + i.ToString().PadLeft(2, '0');


dt.Rows.Add(dr);
}


return dt;
}
}
Default.aspx
复制ASPX代码保存代码<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>





SmartGridView测试





DataSourceID="ObjectDataSource1">






<%# Container.DataItemIndex + 1 %>










TypeName="OjbData">




<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>





SmartGridView测试





DataSourceID="ObjectDataSource1">






<%# Container.DataItemIndex + 1 %>










TypeName="OjbData">





注:为了防止出错要在.cs代码中加上下面这句
复制C#代码保存代码public override void VerifyRenderingInServerForm(Control control)
{


}
另外,如果你的GridView中含有命令按钮的话要在.aspx页面的头部中加上下面这个属性
复制C#代码保存代码EnableEventValidation="false"


转自【webabcd-.NET】







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.