详解如何利用FarPoint Spread表格控件来构造Winform的Excel表格界面输入
我们先来简单了解一下WinForm和FarPoint,WinForm是·Net开发平台中对Windows Form的一种称谓。而FarPoint是一款模拟EXCEL的控件。它可以根据用户的要求实现很大部份的EXCEL操作,且包括多个子表、表格风格定义、公式计算、排序、分组等等都可以实现。本文主要是介绍利用FarPoint Spread表格控件来构造Winform的Excel表格界面输入。
在Winform界面中以类似Excel表格界面中录入相关的数据,其中界面需要录入图片信息,基础信息,列表信息等,综合这些后界面的效果就如下面这样。而本文主要针对如何利用FarPoint Spread表格控件实现类似Excel界面丰富数据的保存及显示,以及希望在使用过程中的一些经验对大家在开发Winform的Excel数据录入和显示方面的开发有一定帮助。
![Winform的Excel数据录入和显示](http://www.kokojia.com/Public/images/upload/article/2016-05/5733f47d87625.png)
根据上面的界面分类能够看到,这个界面大概能怪划分的数据类型分别是基础字段数据、多行的列表数据、图片数据和备注信息的显示录入。那么下面我们根据分类介绍如何实现这些功能。
1、类似Excel的列表总体界面设计
首先,在这个列表中需要在Winform的界面中进行设计拖入一个Farpoint控件到Winform界面上后,然后设置好布局等属性,接着在右键菜单上启动Spread Designer,这样就可以设计相关的Excel样式表格的内容了。
![Spread Designer](http://www.kokojia.com/Public/images/upload/article/2016-05/5733f4846a151.png)
注意:一般情况下,这个界面是在窗体中设计的,当然你的内容可以通过拷贝的方式复制过来,从Excel文档中复制粘贴过来,如果从效果上来看是一样的。不过,虽然Farpoint Spread控件提供了一个另存为Xml文件的操作,并且可以通过API,Open一个XML文件,不过Open的XML文件后,好像内容不能进行修改的,而且类型CellType也是Null(空值)的,所以如果要在一个窗体上动态加载布局是没办法实现的。不过对于开发来说,我们在设计时就把Excel样式的列表界面设计好,这也是一个不错的选择。
![成衣工艺单](http://www.kokojia.com/Public/images/upload/article/2016-05/5733f4881f95c.png)
2、下拉列表的绑定
大多数情况下我们为了输入的便利性,我们会选择在Excel列表中通过下拉列表方式输入内容,如此便可以提高速度和用户体验,但这些内容必须是通过数据库内容进行绑定的,Farpoint Spread控件通过输入很多的内容且包括ComoBox类型数据来绑定下拉列表的数据。如下所示。
![ComoBox类型](http://www.kokojia.com/Public/images/upload/article/2016-05/5733f48c5d56a.png)
当我们下拉类型被指定后,Excel列表的显示方式随之变化,比如像下面一样来显示。
![Excel列表](http://www.kokojia.com/Public/images/upload/article/2016-05/5733f4918c5dc.png)
上面打上对勾的就我们下一步需要绑定列表数据的列表了,绑定列表的数据也不麻烦,但是需要明确Cell的序号,绑定给他数据源就可以了,可实际上的话,经常要数着Cell的行列号上的数字是非常费心神且很不方便。
![Cell的序号](http://www.kokojia.com/Public/images/upload/article/2016-05/5733f498a8b9f.jpg)
对于BindDictItems代码,我使用了扩展方法,所以这个我们是能通过对象直接调用,具体的函数代码如下所示,这个就是调用字典业务类获取数据,但是需要给Items属性赋值,注意其中的Edittable最好选择为true,否则它只会类似于DropdownList那样只显示里面列表的内容。
![Items属性](http://www.kokojia.com/Public/images/upload/article/2016-05/5733f49f5c00c.png)
3、如何构造界面自定义录入
为了能够很方便的输入内容,在对于一些例如弹出框选择内容,图片编辑,备注内容(很长的时候)的编辑来说,我们通常是通过自定义界面来录入比较好,比较Excel样式的界面,录入单元格很小,有时候也实现不了的。所以通过制定控件单元格的单击事件,用来处理特殊录入信息的操作。
![图片操作](http://www.kokojia.com/Public/images/upload/article/2016-05/5733f4afe9eac.png)
下面是展开界面部分内容给大家看看,如下面所示:
![展开界面](http://www.kokojia.com/Public/images/upload/article/2016-05/5733f4c62542a.jpg)
例如,对于下拉列表内容,我们需要进行弹出式选择内容,如下界面所示。
![下拉列表内容](http://www.kokojia.com/Public/images/upload/article/2016-05/5733f4caf1a9b.png)
对于图片单元格,我们单击就可以弹出下面的窗体才能够很方便编辑或者查看。
![图片编辑](http://www.kokojia.com/Public/images/upload/article/2016-05/5733f4cf04a7d.png)
对于备注内容,我们让他弹出一个窗体,更好展现和编辑。
![编辑内容](http://www.kokojia.com/Public/images/upload/article/2016-05/5733f5625a31b.png)
4、数据的显示和保存
在显示普通的主表数据字段这方面是非常的简单的,就是把内容赋值给对应的单元格Text属性即可,如下所示。
![内容赋值](http://www.kokojia.com/Public/images/upload/article/2016-05/5733f58bd84e8.jpg)
当我们需要保存的时候,就是把对应的内容保存到实体类进行数据保存操作即可。
但是在数据比较多的时候,我们需要把内容保存分开,各个函数负责不同的部分即可,在主表保存后继续保存其他部分的内容,例如红色部分就是其他部分的保存操作。
![更多数据](http://www.kokojia.com/Public/images/upload/article/2016-05/5733f5498bd99.jpg)
例如工艺过程是一个列表数据,我们在保存的时候是需要指定行列的属性进行操作,而且我们添加一个Seq的序列号,这样是用来保存内容的顺序,这样加载的时候,我们就按照这个循序进行加载显示,否则会出现问题。
其中GetProcess函数,这个就是一个列表中查找对应顺序的内容,如果有,那么我们需要更新这个对应顺序的内容,否则我们认为它是新的数据,这样就新增到数据库中,所以最后用了InserUpdate就是这个道理。其中GetProcess函数逻辑代码如下所示。
另外有一点是需要注意的是有些单元格是合并列的,所以它的行列号一定要注意,因为有些地方可能需要跳行。
![合并单元格](http://www.kokojia.com/Public/images/upload/article/2016-05/5733f536b6883.jpg)
5、Excel表格的数据打印及导出。
对于使用Farpoint Spread的空间,我们能够非常方便地对里面的内容进行打印或者导出Excel,重要的是代码不繁琐,如下所示。
![导出Excel](http://www.kokojia.com/Public/images/upload/article/2016-05/5733f528b4edf.jpg)
![导出Excel代码](http://www.kokojia.com/Public/images/upload/article/2016-05/5733f52d92068.jpg)
我们导出的效果和界面显示的效果基本上一致的,而且图片等特殊的格式,也是正常保留在Excel里面,从感觉上来说是非常的不错的。
那么在最后我们附上这个系统的一些截图作为补充了解。
到这里,我们基本上是介绍完了利用FarPoint Spread表格控件来构造Winform的Excel表格界面输入的内容了,在上文我们通过了五个部分来介绍的,一是类似Excel的列表总体界面设计的基本内容,二是下拉列表的绑定,三是如何构造界面自定义录入,四是数据的显示和保存,五是Excel表格的数据打印及导出。