`
javatoyou
  • 浏览: 1016734 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

GridView中的数据导出到Excel方法(包含处理模板列)

 
阅读更多
今天再整理一篇有用的文章,对于GridView中数据的导出的处理问题。有时我们在GridView表格中显示的不仅仅是从数据库中读出的值,还需要加 上一些人为处理的模板列(比如删除按钮、下拉选择框、hypelinker等)。在导出后,我们往往不需要这些控件显示或者不希望以控件的形式来显示,而 是以数据的形式来展示。这就需要在导出时作一些处理,参考了一些互联网上的信息,整理如下:
一、导出button

protected void export_Click(object sender, EventArgs e)

{

if (this.MachineList.Rows.Count == 0)

{

Response.Write("<script>alert(&apos;没有查找到数据,无法导出!&apos;)</script>");

}

else

{

this.MachineList.AllowPaging = false; // 将有分页的GridView中的数据全部导出到Excel

Bind();

Export("application/ms-excel", "设备信息.xls");

// 换成 export("application/ms-word", "设备信息.doc"); 那么导出的就是Word格式的了.

this.MachineList.AllowPaging = true;

Bind();

}

}

二、导出主函数

public void Export(string FileType, string FileName)

{

string style = @"<style>.text{mso-number-format:@}</script>";//导入到excel,保存表里数字列中前面存在的 0 .

PrepareGridViewForExport(MachineList);//将模版列显示出来

Response.Clear();

Response.Charset = "GB2312";

Response.ContentEncoding = Encoding.UTF7;

Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());

Response.ContentType = FileType;

this.EnableViewState = false;

this.MachineList.AllowPaging = false;

System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN", true);

StringWriter sw = new StringWriter();

HtmlTextWriter htw = new HtmlTextWriter(sw);

this.MachineList.RenderControl(htw);

Response.Write(style);

Response.Write(sw.ToString());

//Response.Write(dt.ToString());

Response.End();

}

/// <summary>

/// 重写VerifyRenderingInServerForm(Control control)方法,以确保在程序运行时,指定的GridView控件总是位于"<form runat="server"></form>"标记内.

/// 该方法用来确认在运行时为指定的ASP.NET服务器控件呈现<form runat="server">标记.

/// 必须位于<form runat="server">中的控件可以在呈现之前调用此方法,以便在控件被置于标记外时显示错误信息;另外,发送回或依赖于注册的脚本块的

/// 控件应该在Control.Render()方法的重写中调用此方法.

/// 如果回发或使用客户端脚本的服务器控件没有包含在<form runat="server"> 标记中,它们将无法正常工作,这时,可以通过重写VerifyRenderingInServerForm(

/// Control control)方法使用程序正常运行.

/// </summary>

/// <param name="control"></param>

public override void VerifyRenderingInServerForm(Control control)

{

// Confirms that an HtmlForm control is rendered for

//the specified ASP.NET server control at run time.

}

三、如果GridView存在模板列,其中包含子控件,例如CheckBox等,导出EXCEL后就会出现该区域的不规律。所以要对模板列单独处理(转载)

public void PrepareGridViewForExport(Control gv)//模式化特殊元素 flashcong

{

LinkButton lb = new LinkButton();

Literal l = new Literal();

string name = String.Empty;

for (int i = 0; i < gv.Controls.Count; i++)

{

if (gv.Controls[i].GetType() == typeof(LinkButton))

{

l.Text = (gv.Controls[i] as LinkButton).Text;

gv.Controls.Remove(gv.Controls[i]);

gv.Controls.AddAt(i, l);

}

else if (gv.Controls[i].GetType() == typeof(DropDownList))

{

l.Text = (gv.Controls[i] as DropDownList).SelectedItem.Text;

gv.Controls.Remove(gv.Controls[i]);

gv.Controls.AddAt(i, l);

}

else if (gv.Controls[i].GetType() == typeof(CheckBox))

{

l.Text = (gv.Controls[i] as CheckBox).Checked ? "True" : "False";

gv.Controls.Remove(gv.Controls[i]);

gv.Controls.AddAt(i, l);

}

else if (gv.Controls[i].GetType() == typeof(ImageButton))

{

l.Text = "图片";

gv.Controls.Remove(gv.Controls[i]);

gv.Controls.AddAt(i, l);

}

if (gv.Controls[i].HasControls())

{

PrepareGridViewForExport(gv.Controls[i]);

}

}

}

注:对于模板列的处理还有一特殊情况,我在GridView使用时,用了<a></a>在客户端打开对话框的方法。在导出时,这一列不是模板列控件,但导出后Excel中会显示有下划线的链接,所以想去掉它。

想了很多方法,也没成功。后来我只好用了不得以的方法,多加一列文本列,用来显示链接的文本,导出前采用列隐藏的方法解决。

如果有更好的处理方法,也请各位指教!


分享到:
评论

相关推荐

    实现GridView中的数据转换成EXCEL中,基于EXCEL模板.zip

    实现GridView中的数据转换成EXCEL中,基于EXCEL模板.zip

    C# excel导入导出 宏求和统计

    按钮“导出excel”实现从页面导出excel文件, (注:此导出的excel是通过模板demo.xls导出的,模板写了一个求和宏,执行宏:打开导出的excel文件打开 工具-宏-宏-执行宏(求和);即可看到total处显示求和结果,实现...

    GridView使用集合

    1、在父GridView中的编辑模板中嵌套一个子GridView 2、三层GridView嵌套 四、分页排序 1、分页 2、列排序,点击列升序、降序排序 五、结合控件 1、CheckBox控件,多选、全选 2、DropDownList控件 3、隐藏控件,当...

    第7章 数据绑定控件

    实例225 将GridView控件的数据导出到Excel 并进行格式化 355 实例226 将Excel中数据导入到Aceess 并绑定GridView 356 实例227 将GridView中绑定的Access数据 生成XML 358 实例228 嵌套购物车(可增减商品数并显示 ...

    gridview扩展

    使用方法(设置CheckedRowCssClass复合属性): CheckBoxID - 模板列中 数据行的复选框ID CssClass - 选中的行的 CSS 类名 &lt;br&gt;8、导出数据源的数据为Excel、Word或Text(应保证数据源的类型为...

    gridview控件的使用(九宫式的的排列)

    ”做分隔符分为两部分,左边的部分为导出Excel的文件名称,右边的部分为需要隐藏的列的索引(列索引用“,”分开) 9、给数据行增加右键菜单 ItemType - 右键菜单的项的类别(Link,Command,Custom,Separator) ...

    .NET常用源代码

    将gridview导出到 word excel ppt pdf等文档 将excel转换为xml 修改并且更新datatable中的数据 在两个asp.net页面间传值 在asp.net中实现搜索引擎 webforms实现在线购物车 webbrowser的例子 一个多设备实现的to do...

    asp.net操作Excel

    YYControls应用之TreeView实现复选联动及GridView导出Excel、Word、Text 联动复选框(复选框的全选和取消全选)。选中指定的父复选框,则设置其所有子复选框为选中状态;取消选中指定的父复选框,则设置其所有子复...

    一个ViewGrid控件

    8、导出数据源的数据为Excel、Word或Text(应保证数据源的类型为DataTable或DataSet) 使用方法: 为WebGrid添加的方法 Export(string fileName) Export(string fileName, ExportFormat exportFormat) Export...

    免费DataGridView打印及.NET轻松打印控件5.0版

    ChartGraph图表生成组件(电脑需安装Excel),用于将DataGridView表格(窗口程序)与GridView(网页程序)中的数据生成图表图片,然后再使用VB2008Print组件提供的图片打印功能(DrawImage)即可实现类似Excel的简单...

    免费DataGridView打印及.NET轻松打印控件5.5版(VB打印,C#打印)

    9、Excel导出功能,可以将DataGridView和GridView导出为Excel文件,5.2版控件还增加了不依赖Office的导出Excel功能,而且速度非常快,5.4版还增加了合并单元格的导出功能。 10、打印DataGridView时的打印方案保存与...

    asp.net知识库

    使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能 一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标...

    免费DataGridView打印及.NET轻松打印控件5.6版(VB打印,C#打印)

    9、Excel导出功能,可以将DataGridView和GridView导出为Excel文件,5.2版控件还增加了不依赖Office的导出Excel功能,而且速度非常快,5.4版还增加了合并单元格的导出功能。 10、打印DataGridView时的打印方案保存与...

Global site tag (gtag.js) - Google Analytics