把GridView导出为一个Excel文件算是一个经常要用到的功能,也比较简单,我们来扩展一个GridView以实现这样的功能。
控件开发
1、新建一个继承自GridView的类。
/**////<summary>
///继承自GridView
///</summary>[ToolboxData(@"<{0}:SmartGridViewrunat='server'></{0}:SmartGridView>")]
publicclassSmartGridView:GridView
{
}
2、重写OnRowCommand,以实现把GridView导出为Excel的功能
/**////<summary>
///OnRowCommand
///</summary>
///<paramname="e"></param>protectedoverridevoidOnRowCommand(GridViewCommandEventArgse)
{
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.StringWritersw=newSystem.IO.StringWriter();
HtmlTextWriterhtw=newHtmlTextWriter(sw);
//e.CommandArgument用“;”隔开两部分,右边的部分为需要隐藏的列的索引(列索引用“,”分开)
if(e.CommandArgument.ToString().Split(';').Length>1)
{
foreach(stringsine.CommandArgument.ToString().Split(';')[1].Split(','))
{
inti;
if(!Int32.TryParse(s,outi))
{
thrownewArgumentException("需要隐藏的列的索引不是整数");
}
if(i>this.Columns.Count)
{
thrownewArgumentOutOfRangeException("需要隐藏的列的索引超出范围");
}
this.Columns[i].Visible=false;
}
}
//隐藏“导出Excel”按钮
((Control)e.CommandSource).Visible=false;
//如果HeaderRow里的控件是button的话,则把它替换成文本
foreach(TableCelltcinthis.HeaderRow.Cells)
{
//TableCell里的每个Control
foreach(Controlcintc.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
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingSystem.ComponentModel;
/**////<summary>
///OjbData的摘要说明
///</summary>publicclassOjbData
{
publicOjbData()
{
//
//TODO:在此处添加构造函数逻辑
//
}
[DataObjectMethod(DataObjectMethodType.Select,true)]
publicDataTableSelect()
{
DataTabledt=newDataTable();
dt.Columns.Add("no",typeof(string));
dt.Columns.Add("name",typeof(string));
for(inti=0;i<30;i++)
{
DataRowdr=dt.NewRow();
dr[0]="no"+i.ToString().PadLeft(2,'0');
dr[1]="name"+i.ToString().PadLeft(2,'0');
dt.Rows.Add(dr);
}
returndt;
}
}
Default.aspx
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>SmartGridView测试</title>
</head>
<body>
<formid="form1"runat="server">
<div>
<yyc:SmartGridViewID="SmartGridView1"runat="server"AutoGenerateColumns="False"
DataSourceID="ObjectDataSource1">
<Columns>
<asp:TemplateFieldItemStyle-Width="50px">
<headertemplate>
<asp:Buttonid="btnExportToExcel"runat="server"Text="Excel"CommandName="ExportToExcel"CommandArgument="ExcelFileName;5,6"/>
</headertemplate>
<itemtemplate>
<%#Container.DataItemIndex+1%>
</itemtemplate>
</asp:TemplateField>
<asp:BoundFieldDataField="no"HeaderText="序号"SortExpression="no"ItemStyle-Width="100px"/>
<asp:BoundFieldDataField="name"HeaderText="名称"SortExpression="name"ItemStyle-Width="100px"/>
<asp:BoundFieldDataField="no"HeaderText="序号"SortExpression="no"ItemStyle-Width="100px"/>
<asp:BoundFieldDataField="name"HeaderText="名称"SortExpression="name"ItemStyle-Width="100px"/>
<asp:BoundFieldDataField="no"HeaderText="序号"SortExpression="no"ItemStyle-Width="100px"/>
<asp:BoundFieldDataField="name"HeaderText="名称"SortExpression="name"ItemStyle-Width="100px"/>
</Columns>
</yyc:SmartGridView>
<asp:ObjectDataSourceID="ObjectDataSource1"runat="server"SelectMethod="Select"
TypeName="OjbData"></asp:ObjectDataSource>
</div>
</form>
</body>
</html>
注:为了防止出错要在.cs代码中加上下面这句
publicoverridevoidVerifyRenderingInServerForm(Controlcontrol)
{
}
另外,如果你的GridView中含有命令按钮的话要在.aspx页面的头部中加上下面这个属性
EnableEventValidation="false"
OK
源码下载
分享到:
相关推荐
只能导出导出devexpress插件的GridControl控件中GridView表格中的数据,表格中有什么数据导出什么数据,列顺序也不变。 文件说明: 1.ExportTableExcel.cs:实现导出逻辑的类 2.ExportExcelStyle.cs:导出的...
本文实例展示了C#使用RenderControl将GridView控件导出到EXCEL的方法,是非常实用的一个功能,分享给大家供大家参考。具体如下: 主要功能代码如下: // 把GridView输出到Excel文件 private void ExportExcel...
将gridview数据导出到word和excel类,可以做成dll使用
扩展GridView控件-导出数据源的数据为Excel、Word或Text
GridView 导出 到 Excel 的 C# 控件 源码
asp.net中gridview控件中内容导出成文件,同时文件可以存储为word文档或者Excel文档
dataGridView控件中的数据导出到Excel所需要的三个.dll文件
C# vs2008中GridView控件 导出EXCEL 实例
”做分隔符分为两部分,左边的部分为导出Excel的文件名称,右边的部分为需要隐藏的列的索引(列索引用“,”分开) 9、给数据行增加右键菜单 ItemType - 右键菜单的项的类别(Link,Command,Custom,Separator) ...
关于C# .net中Gridview控件的全部应用,如分页,导出导入Excel,排序,数据的增删改查,备份等操作,很实用的源码哦
可以让你根据教程做出你想要的导出效果,对于一些不懂或者新手很有帮助
将datagridview的选中部分导出到EXCEL,可跳行选中,将选中的数据导出到表格中,方便快捷,源码已在VS2013中测试成功
一个DataGrid,支持列样式有...行头数字,自动列宽,设置文字变红,打印预览,直接打印,导出Excel,导出Word,导出Xml,导出Html等等功能,所有这些功能都封装到一个Dll中,使用方便.里面有源代码和使用例子,希望对大家有用,呵呵.
实例225 将GridView控件的数据导出到Excel 并进行格式化 355 实例226 将Excel中数据导入到Aceess 并绑定GridView 356 实例227 将GridView中绑定的Access数据 生成XML 358 实例228 嵌套购物车(可增减商品数并显示 ...
自定义DataGridView控件,可实现排序、导出EXCEL、分页等功能。不需要额外配置可直接使用。
很全的GridView例子 例子 GridView自动编号 GridView增删改 ...GridView结合控件 GridView合并表头 GridView固定表头 GridView分页 GridView导入导出 GridView弹出窗口 GridView查询 GridView绑定图片
全能GridView空间 有翻页,下拉菜单,添加,编辑,删除,导出Excel等功能
摘要:.NET源码,Ajax相关,GridView,SmartGridView 扩展GridView控件正式版,内含SmartGridView正式版、SmartTreeView,TreeView实现复选联动及GridView导出Excel、导出Word、导出TXT文本。 控件使用: 1、鼠标...
1、导出Excel,Word 2、导入Excel 三、多层嵌套 1、在父GridView中的编辑模板中嵌套一个子GridView 2、三层GridView嵌套 四、分页排序 1、分页 2、列排序,点击列升序、降序排序 五、结合控件 1、CheckBox控件,多选...