包含自定义控件GridView 如何导出到Excel

简介: 我们常常会用到GridView导出到Excel的功能,我之前也有一些文章做了介绍。 可以参考的文章: GridView导出到Excel和开源图表工具 GridView导出为Excel后,导出的.

我们常常会用到GridView导出到Excel的功能,我之前也有一些文章做了介绍。

今天有人问我,如果Girdview模板列里使用了自定义控件,那导出的时候如何处理?

比如该自定义控件包含一个Dropdownlist和三个Label控件,其中用来在页面上显示数据的是其中一个Label控件,现在的问题是,如果不在PrepareControlForExport()中对该自定义控件进行处理,那么导出的Excel文件的对应Gridview中使用了自定义控件的列的内容全部相同(为Dropdownlist控件的第一个Item),但是对该自定义控件进行处理的话,不知道该如何才能正确的取出它的值(用来显示的label中的值),试图无法把自定义控件转换成Dropdowlist和Label中的任何一种,但强制转换的话运行到该语句会报错。

我们首先来看看在GridView导出到Excel和开源图表工具提到的导出工具中的开发,源文件可以在这里下载:Export GridView to Excel

GridViewExportUtil.cs中,函数PrepareControlForExport是这样的:

 
/// <summary>
    /// Replace any of the contained controls with literals
    /// </summary>
    /// <param name="control"></param>
    private static void PrepareControlForExport(Control control)
    {
        for (int i = 0; i < control.Controls.Count; i++)
        {
            Control current = control.Controls[i];
            if (current is LinkButton)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
            }
            else if (current is ImageButton)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
            }
            else if (current is HyperLink)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
            }
            else if (current is DropDownList)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
            }
            else if (current is CheckBox)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False"));
            }
 
            if (current.HasControls())
            {
                GridViewExportUtil.PrepareControlForExport(current);
            }
        }
    }

 

 

这一段代码是遍历传入control的所有子control,对于每一个子control,根据子control的类型生成一个LiteralControl,并用这个LiteralControl代替当前的子control。对于LinkBtton,使用它的文本代替,对于ImagaButton,是使用它的Alternate文本代替。函数针对LinkButton, ImageButton, HyperLink, DropDwonList, CheckBox做了处理,如果当前控件不是这其中的任何一种,就判断是否有子控件,并递归调用。

回到我们之前的问题,如果GridView中有一个自定义的控件,那我们怎么办?其实解决的办法就按原思路来就可以,判断是不是自定义控件,使用某种方式把这个自定义控件中的某个希望导出的文本信息读取出,转换为一个Literal control就可以。

我们可以写一个函数来处理这种比较复杂的情况,示范代码如下:

            else if (current is MyWebController)            
             {               
                          control.Controls.Remove(current);               
                          control.Controls.AddAt(i, GetLiteralController(current));           
             }

至于GetLiteralControler的写法,可以遍历自定义控件中的所有子控件,根据控件的特点,比如位置,ID选定一个控件,转换为Literal控件并返回。

本文是个随笔,记录了一下思路,没有进行实际检验,如果问题,还请大家指出,逐步充实。

相关文章
|
4月前
|
关系型数据库 MySQL Shell
不通过navicat工具怎么把查询数据导出到excel表中
不通过navicat工具怎么把查询数据导出到excel表中
46 0
|
25天前
|
Java API Apache
|
28天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
37 4
|
2月前
|
JavaScript 前端开发 数据处理
Vue导出el-table表格为Excel文件的两种方式
Vue导出el-table表格为Excel文件的两种方式
|
3月前
|
SQL C# 数据库
EPPlus库的安装和使用 C# 中 Excel的导入和导出
本文介绍了如何使用EPPlus库在C#中实现Excel的导入和导出功能。首先,通过NuGet包管理器安装EPPlus库,然后提供了将DataGridView数据导出到Excel的步骤和代码示例,包括将DataGridView转换为DataTable和使用EPPlus将DataTable导出为Excel文件。接着,介绍了如何将Excel数据导入到数据库中,包括读取Excel文件、解析数据、执行SQL插入操作。
EPPlus库的安装和使用 C# 中 Excel的导入和导出
|
2月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
2月前
|
前端开发 JavaScript
💥【exceljs】纯前端如何实现Excel导出下载和上传解析?
本文介绍了用于处理Excel文件的库——ExcelJS,相较于SheetJS,ExcelJS支持更高级的样式自定义且易于使用。表格对比显示,ExcelJS在样式设置、内存效率及流式操作方面更具优势。主要适用于Node.js环境,也支持浏览器端使用。文中详细展示了如何利用ExcelJS实现前端的Excel导出下载和上传解析功能,并提供了示例代码。此外,还提供了在线调试的仓库链接和运行命令,方便读者实践。
333 5
|
2月前
|
前端开发 JavaScript Java
导出excel的两个方式:前端vue+XLSX 导出excel,vue+后端POI 导出excel,并进行分析、比较
这篇文章介绍了使用前端Vue框架结合XLSX库和后端结合Apache POI库导出Excel文件的两种方法,并对比分析了它们的优缺点。
344 0
|
3月前
|
存储 Java
java的Excel导出,数组与业务字典匹配并去掉最后一个逗号
java的Excel导出,数组与业务字典匹配并去掉最后一个逗号
50 2
|
4月前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之如何直接导出excel文件
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。