我们辛苦录入的数据都希望能有重复利用的价值,一方面这些基础数据需要有数据库级的重复利用,程序级别的重复利用,另一方面还需要直接可以方便的导出倒入的功能比较好,虽然我们自己制作的统计分析功能很强大,但是还是没有Office Excel这么灵活强大,毕竟人家是世界级别的,我们的产品暂时还没能力能跟这个匹敌,这个是实话。
使用我们软件的客户经常需要有导出数据的实际工作需要,导出的数据功能的最重要的意图是数据能重复利用,辛辛苦苦录入了某一个系统中的数据无法重复利用,或者很难重复利用,那是很残忍的事情,是严重浪费生命的事情,我们尽量不要让客户折磨能重复利用的都重复利用。
在走火入魔C#.NET通用权限管理系统组件源码里,有一个假导出Excel功能,可供大家参考一下。具体实现功能如下:任何信息管理系统中,若有必要都做个导出功能比较好。
很多东西其实老早就发明了,但是真正普及都需要一个过程,100年前轿车就被发明了,到了100年后才普及得厉害,走火入魔C#.NET通用权限管理系统也一样被推广了3年左右,再过几年也会全国都普及了,大家都慢慢的认可了,就象论坛程序一个道理没几个人自己写了,直接买个现成的拿来用用就可以了,没几个SB会自己埋头苦干论坛程序了,通用权限到今天为止已经销售了200多套,未来的3年内,应该全国到处都会用这个来开发信息化管理系统,客户不会允许你瞎折腾了,浪费生命、搞得死去活来何必,直接拿过来用用配置一下,就完事了,省心省事。
中国有几亿农民,日子过得蛮苦的,美国可能只有几百万农民就可以了,应为他们都用工具大规模批量生成,我们国内有多少开发人员都在重复劳动?我做过的10年的路又会有 多少个人走过,跟我有同样想法的人,会有多过多少,他们可能都没能坚持,没我有毅力,不怕挨骂、不怕被拍砖头、不怕别人不购买、不怕当炮灰。
任何信息管理系统,都需要一个铜墙铁壁的经得起考验的权限配置管理工具、这个若是从头开始做,需要几年的时间完善,没必要生命浪费在这个上,每个10年以上工作经验的程序员,都能做出一个有重复利用价值的工具,我们的生产力就可以得到提高,社会就会进步。
导出数据功能是导出当前页面上的数据,全部导出是指所有的数据。
导出CVS时会遇到文件名乱码、文件乱码的问题,WEB里还会遇到直接打开还是另存为的问题等。
代码参考如下:
全部导出:
2 {
3 // 全部导出Excel
4 DataTable dataTable = ServiceManager.Instance.OrganizeService.GetDT(UserInfo);
5 dataTable.DefaultView.Sort = BaseOrganizeTable.FieldParentId + " , " + BaseOrganizeTable.FieldSortCode;
6 this .ExportExcel( this .grdOrganize, dataTable.DefaultView, @" \Modules\Export\ " , " 组织机构.csv " );
7 }
导出当前页面:
2 {
3 // 导出Excel
4 this .ExportExcel( this .grdOrganize, @" \Modules\Export\ " , " 组织机构.csv " );
5 }
2 /// <summary>
3 /// 检查文件是否存在
4 /// </summary>
5 /// <param name="fileName"> 文件名 </param>
6 /// <returns> 是否存在 </returns>
7 private bool FileExist( string fileName)
8 {
9 if (System.IO.File.Exists(fileName))
10 {
11 string targetFileName = System.IO.Path.GetFileName(fileName);
12 if (MessageBox.Show(AppMessage.Format(AppMessage.MSG0236, targetFileName), AppMessage.MSG0000, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
13 {
14 System.IO.File.Delete(fileName);
15 }
16 else
17 {
18 return true ;
19 }
20 }
21 return false ;
22 }
23 #endregion
24
25 #region private void ExportExcel(DataGridView dataGridView, DataView dataView, string directory, string fileName) 导出Excel
26 /// <summary>
27 /// 导出Excel
28 /// </summary>
29 /// <param name="dataGridView"> 表格控件 </param>
30 /// <param name="dataView"> 数据表格 </param>
31 /// <param name="directory"> 目录 </param>
32 /// <param name="fileName"> 文件名 </param>
33 public void ExportExcel(DataGridView dataGridView, DataView dataView, string directory, string fileName)
34 {
35 // 开始忙了
36 this .Cursor = Cursors.WaitCursor;
37 string directoryName = BaseSystemInfo.StartupPath + directory;
38 if ( ! Directory.Exists(directoryName))
39 {
40 Directory.CreateDirectory(directoryName);
41 }
42 string file = BaseSystemInfo.StartupPath + directory + fileName;
43 if ( ! this .FileExist(file))
44 {
45 BaseExportCSV.ExportCSV(dataGridView, dataView, file);
46 Process.Start(file);
47 }
48 // 已经忙完了
49 this .Cursor = Cursors.Default;
50 }
51 #endregion
52
53 public void ExportExcel(DataGridView dataGridView, string directory, string fileName)
54 {
55 ExportExcel(dataGridView, (DataView)(dataGridView.DataSource), directory, fileName);
56 }
相关工具包的代码如下:
本文转自 jirigala 51CTO博客,原文链接:http://blog.51cto.com/2347979/1200716,如需转载请自行联系原作者