DevExpress GridControl GridView 导出到 Excel 类
说明:
1>GridView 导出到 Excel (如果分页,只导出当前页数据)
2>GridView 导出到 Excel
3>方法2可以参考DataTable 导出到 Excel
自定义类如下:
#region GridView 导出到 Excel Method First
/// <summary>
/// GridView 导出到 Excel (如果分页,只导出当前页数据)
/// </summary>
/// <param name="gv">GridView</param>
/// <param name="sheetName">工作表名称</param>
/// <param name="isOpen">导出完成后是否打开Excel 如果不打开会自动杀死当前Excel进程</param>
/// <returns>错误信息,如果为空,说明用户取消导入</returns>
public static string GvToExcel(DevExpress.XtraGrid.Views.Grid.GridView gv, string sheetName, bool isOpen)
{
//返回值
string str = "";
string fileName = "";
//保存对话框,是否保存
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "(*.xls,*.xlsx)|*.xls;*.xlsx";
if (sfd.ShowDialog() != DialogResult.OK)
{
str = "";
return str;
}
fileName = sfd.FileName; if (gv == null)
{
str = "GridView 不能为空!";
return str;
}
if (gv.RowCount < 1)
{
str = "没有记录可以导出";
return str;
} //获取列名、列标题 放到List集合中
System.Collections.ArrayList listCaption = new System.Collections.ArrayList();
System.Collections.ArrayList listFieldName = new System.Collections.ArrayList();
for (int i = 0; i < gv.Columns.Count; i++)
{
if (gv.Columns[i].Visible)
{
listCaption.Add(gv.Columns[i].Caption);
listFieldName.Add(gv.Columns[i].FieldName);
}
} Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
excel.Workbooks.Add(true);
Microsoft.Office.Interop.Excel.Worksheet wSheet = (Microsoft.Office.Interop.Excel.Worksheet)excel.ActiveSheet;
Microsoft.Office.Interop.Excel.Range range;
if (sheetName != null && sheetName.Length > 0)
{
wSheet.Name = sheetName;
}
else
{
wSheet.Name = gv.Name;
} try
{
//写标题
for (int j = 0; j < listCaption.Count; j++)
{
excel.Cells[1, j + 1] = listCaption[j];
range = (Microsoft.Office.Interop.Excel.Range)wSheet.Cells[1, j + 1];
range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
}
//写内容
for (int m = 0; m < gv.RowCount; m++)
{
for (int n = 0; n < listCaption.Count; n++)
{
excel.Cells[m + 2, n + 1] = gv.GetRowCellValue(m, listFieldName[n].ToString()) is DBNull ? "" : gv.GetRowCellValue(m, listFieldName[n].ToString()).ToString();
}
} wSheet.SaveAs(fileName,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); str = "导出成功!共导出 " + gv.RowCount + " 条数据";
return str;
}
catch
{
str = "导出异常,请重试";
return str;
}
finally
{
if (isOpen)
{
//前台显示给用户
excel.Visible = true;
wSheet = null;
excel = null;
}
else
{
excel.Visible = false;
excel.Quit();
// excel = null;
//杀死Excel 进程
KillProcess(excel);
}
GC.Collect();
}
}
#endregion #region GridView 导出到 Excel Method Second
/// <summary>
/// GridView 导出到 Excel
/// </summary>
/// <param name="dt">GridControl.DataSource ==dt</param>
/// <param name="gv">GridView 名称</param>
/// <param name="sheetName">工作表名称</param>
/// <param name="isOpen">导出完成后是否打开Excel 如果不打开会自动杀死当前Excel进程</param>
/// <returns>错误信息,如果为空,说明用户取消导入</returns>
public static string GvToExcel(DataTable dt, DevExpress.XtraGrid.Views.Grid.GridView gv, string sheetName, bool isOpen) {
//返回值
string str = ""; //执行方法,如果datatable为空,导出当前页数据,否则,导出所有页数据
if(dt==null){
str=GvToExcel(gv,sheetName,isOpen);
}else{
if (gv == null)
{
str = "GridView 不能为空!";
return str;
}
if (gv.RowCount < 1)
{
str = "没有记录可以导出";
return str;
} //获取列名、列标题 放到List集合中
System.Collections.ArrayList listCaption = new System.Collections.ArrayList();
System.Collections.ArrayList listFieldName = new System.Collections.ArrayList();
for (int i = 0; i < gv.Columns.Count; i++)
{
if (gv.Columns[i].Visible)
{
listCaption.Add(gv.Columns[i].Caption);
listFieldName.Add(gv.Columns[i].FieldName);
}
}
//将ArrayList 转换成 一维数组
string[] captions = (string[])listCaption.ToArray(typeof(string));
string[] fieldName =(string[]) listFieldName.ToArray(typeof(string));
//推荐使用List<> 因为ArrayList转换时会装、拆箱,影响效率
//List<string> list = new List<string>();
//list.Add("aa");
//string[] aaa =list.ToArray(); str=DtToExcel(dt,captions,fieldName,sheetName,isOpen);
}
return str;
}
#endregion
调用(举例):
string str =Functionjsj.GvToExcel(gridView1, "学生信息", true);
if (str.Length > 0) {
MessageBox.Show(str, System.Windows.Forms.Application.ProductName);
return;
}
//说明 导出的表为 dt表中gridview1显示的列的集合
string str = Functionjsj.GvToExcel(dt,gridView1, "学生信息", true);
if (str.Length > 0)
{
MessageBox.Show(str, System.Windows.Forms.Application.ProductName);
return;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
DevExpress GridControl GridView 导出到 Excel 类的更多相关文章
- asp.net教程:GridView导出到Excel或Word文件
asp.net教程:GridView导出到Excel或Word文件</ br> 在项目中我们经常会遇到要求将一些数据导出成Excel或者Word表格的情况,比如中国移动(我是中国移动用户) ...
- GridView导出成Excel字符"0"丢失/数字丢失的处理方式 收藏
GridView导出成Excel字符"0"丢失/数字丢失的处理方式 收藏 GridView 导出成Excel文件,这个代码在网上比较多.但是发现存在一个问题,导出的数据中如果有&q ...
- DevExpress XtraGrid 数据导出导入Excel
// <summary> /// 导出按钮 /// </summary> /// <param name="sender"></param ...
- DataTable 导出到 Excel 类
底层类: #region DataTable 导出到 Excel /// <summary> /// DataTable 导出到 Excel /// </summary> // ...
- DevExpress.GridControl.gridView的一些注意
1.DevExpress控件组中的GridControl控件不能使横向滚动条有效.现象:控件中的好多列都挤在一起,列宽都变的很小,根本无法正常浏览控件单元格中的内容. 解决: gridView1.Op ...
- Gridview导出到Excel
#region #导出到Excel protected void Button2_Click(object sender, EventArgs e) { Respons ...
- WinForm------如何将GridControl数据导出到Excel
转载: http://www.cnblogs.com/xiaofengfeng/archive/2011/11/22/2258906.html 代码: SaveFileDialog saveFileD ...
- DevExpress gridcontrol gridView主从表折叠/展开显示
在使用报表的时候,有很多需要主从表一起显示,从表不需要另外弹窗显示明细,反而直接显示在主表下方.如图所示: 第一次做这个功能,主从表显示,从表列隐藏,从表单元格点击事件这三个功能点花费了很多时间,在网 ...
- devExpress GridControl gridView笔记
gridView1.Appearance.EvenRow.BackColor = Color.FromArgb(, , , ); gridView1.Appearance.OddRow.BackCol ...
随机推荐
- Linux下相关查找文件命令(find locate which whereis type)
以下内容摘自:http://blog.csdn.net/jessica1201/article/details/8139249 标注的内容为自己的补充: 我们经常需要在系统中查找一个文件,那么在lin ...
- zepto源码学习-03 $()
在第一篇的时候提到过关于$()的用法,一个接口有很多重载,用法有很多种,总结了下,大概有一以下几种 1.$(selector,context?) 传入一个选择器返回一个zepto对象 2.$(func ...
- UVA 10765 Doves and bombs
给定一个无向的连通图,要求每个点去掉后连通分量的数目,然后输出连通分量最多的m个点. 分析: 先求出双连通分量,然后统计所有双连通分量中割顶出现的次数,最后求出的就是割顶去掉后剩下的双连通的数目,对于 ...
- js构造函数
使用函数做自动化 function createObj(nick, age){ var obj = { nick: nick, age: age, printName: function(){ con ...
- [转贴]使用CryptoAPI解析X509证书和P12证书
原文在 http://bbs.pediy.com/archive/index.php?t-97663.html,但是觉得这篇文章非常好,我抄下来作我笔记用 一.解析X509证书 1.从磁盘上的证书文件 ...
- datetime 和 smalldatetime
用于表示某天的日期和时间的数据类型. datetime 和 smalldatetime 表示某天的日期和时间. 数据类型 范围 精确度 datetime 1753 年 1 月 1 日到 9999 年 ...
- 【HDOJ】1074 Doing Homework
最开始以为是贪心,不过写到一半发现不对,看了一下讨论,知道需要使用状态压缩DP,现在还没有使用深搜实现(据说可以)晚上实现一下,道理应该是类似的.前面做八数码,至今未果,就说需要状态压缩.这个太神奇了 ...
- BGP详解
相信各位站长在托管服务器或者选择虚拟主机的时候,提供商都会说他们的机房是双线机房,保证你的站点访问速度,那么这里所谓的双线机房到底是何意思,它又为何能提升站点的访问速度呢? 一遍小型机房的所谓双线路其 ...
- vijosP1567子串计数
描述现在有一个字符串,请求出这个字符串不相同的子串个数.YXY现在不会做,请你来帮忙…… n<=20W 题解: 后缀数组裸题,其实我在练习模板写对了没 代码: #include<cstdi ...
- HTTP2.0那些事
1. HTTP2.0的前世 http2.0的前世是http1.0和http1.1这两兄弟.虽然之前仅仅只有两个版本,但这两个版本所包含的协议规范之庞大,足以让任何一个有经验的工程师为之头疼.http1 ...