您的位置:首页 > 其它

使用DevExpress导出GridControl控件数据到excel文件

2017-01-09 16:12 681 查看
使用DevExpress可以实现将界面的GridControl的内容直接导出到excel文件,一般实现方法如下所示:

public void export(GridControl gridControl1)
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.FileName = "";
saveFileDialog1.Filter = "Excel文件(.xls)|*.xls";
string strtype = "Excel文件名";

saveFileDialog1.FileName = strtype + DateTime.Now.ToString("yyyyMMddhhmmss");
saveFileDialog1.OverwritePrompt = false; //已存在文件是否覆盖提示
if (saveFileDialog1.ShowDialog() != DialogResult.OK)
return;
//已存在文件是否覆盖提示
while (System.IO.File.Exists(saveFileDialog1.FileName) &&
DevExpress.XtraEditors.XtraMessageBox.Show("该文件名已存在,是否覆盖?",
"提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
{
if (saveFileDialog1.ShowDialog() != DialogResult.OK)
return;
}
if (saveFileDialog1.FileName != "")
{
try
{
System.IO.FileStream fs =(System.IO.FileStream)saveFileDialog1.OpenFile();
gridControl1.ExportToXls(fs);//将GridControl的内容导出到指定的文件路径
fs.Close();
DevExpress.XtraEditors.XtraMessageBox.Show("数据导出成功!", "提示");
}
catch (Exception ex)
{
if (ex.Message.Contains("正由另一进程使用"))
{
DevExpress.XtraEditors.XtraMessageBox.Show("数据导出失败!文件正由另一个程序占用!", "提示");
}
else
DevExpress.XtraEditors.XtraMessageBox.Show("数据导出失败!数据量过大,请分别统计再导出!", "提示");
}
}

}不过以上代码会出现一定的bug,比如说如果GridControl的数据是取自于数据库,之后使用CustomColumnDisplayText事件的触发函数修改其中一两个字段的值后展示到界面,而使用以上的方法则导出的结果还为取自数据库的原始值,并非处理后的值。那么应当为ExportToXls函数设置导出选项。

将如下代码:

gridControl1.ExportToXls(fs);//将GridControl的内容导出到指定的文件路径替换为:
DevExpress.XtraPrinting.XlsExportOptions options = new DevExpress.XtraPrinting.XlsExportOptions(DevExpress.XtraPrinting.TextExportMode.Value);
options.TextExportMode = TextExportMode.Text;//设置导出模式为文本
gridControl1.ExportToXls(fs,options);

而导出的excel文档的格式不太美观,列的宽度过短,因为这种方法是直接导出界面显示的GridControl效果,默认为表格列宽度最小值,应当对GridControl的属性进行设置:设置GridControl的OptionPrint下的AutoWidth的值为false。以上设置即可使导出的excel文件列宽自动调整,并且可以根据需要调整GridControl控件具体列在界面展示宽度即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐