本文的目标是通过MultiRow快速开发一个简单的WinForm数据库应用 - “员工信息管理系统”。 其中会使用到MulitRow提供的部分内置的Cell类型、MultiRow模板创建、以及MulitRow的打印功能。
首先,我们使用Microsoft Access 2007数据库,创建一个数据表,命名为Employees,创建一些字段,给每个字段指定数据类型。请看下图:
字段数据类型和名字确定后,切换到DataSheet View模式下,开始填入数据,如下图所示:
传统的表格控件在展示数据表当中的一条记录时,大部分都是将一条记录展示在表格控件当中独立的一行里,每行当中的列对应数据表当中的一列,比如.net framework 提供的DataGridView控件,它做数据绑定绑定之后,如下图所示:
上面创建的数据库有19个字段,如果使用DataGridView展示,应用程序将需要更宽的距离才能完全展示一条记录。这样导致可读性大打折扣。因此,对于一条数据表记录可以自由布局,增强可读性和美观性是表格类控件一直前进的方向之一。
而使用MulitRow,你可以随心所欲地在MulitRow的一个Row上面安排每个Cell的排列位置,甚至可以让多个Cell叠加,让每个Cell来展示数据表记录当中的每个数据域。这时候你需要做的是打开Visual Studio,创建一个Windows Forms Application工程,然后添加一个MultiRow的模板(Template),至于如何添加模板和使用MulitRow提供的集成模板设计器,可以参考之前的三篇文章。
在创建模板的时候,我们需要根据数据库当中的不同字段类型选择不同的Cell类型来展示数据。
本例中,我只使用了9种Cell类型,根据自己的喜好摆出来下面的布局形式:
所有的Cell都排布在模板的Row区域当中,这个Row在模板加载到GcMultiRow控件之后,会根据数据记录条数发生迭代。另外,我根据不同的数据域类型,选择了不同的Cell类型展示数据,其中
· 背景为SystemColors.Control的Cell为RowHeaderCell,用来描述后面的数据类型的Cell,就像一个标签一样,他可以有Hover,点击等效果,也可以执行选择以及显示行号;
· 布尔类型的数据可以使用CheckBoxCell来展示;
· “电话号码”,“邮编”,“月薪”等有固定格式的类型,可以使用MaskedTextBoxCell来展示,通过设置他的Mask属性来控制显示的格式;
· 日期类型的可以使用DateTimePicker类型;
· 图片类型可以使用ImageCell,等等。
MulitRow提供了多达23种Cell类型,你可以根据数据类型选择不同的Cell类型展示数据,在这里就不详细介绍,可以参考http://www.grapecity.cn/powertools/products/mr_features.htm
当Cell的位置摆放好之后,需要将每个数据Cell跟数据表当中的字段关联起来,让这个Cell在运行起来之后显示特定的数据列当中的值。可以使用MultiRow模板设计器提供的TemplateProperty管理器或者属性管理器来设置每个数据Cell的DataField属性,将其和数据表的列名相关联,这样模板加载之后,每个数据Cell就可以显示数据表当中对应的列了。
如果觉得模板的样式过于单调,可以需要调节Template当中的相关Style属性来设置外观,可以参考MulitRow帮助文档中“如何设置Style和皮肤”章节。我设计了一个样式,如下图所示:(示意而已,如果觉得丑还请见谅~)
完成上面工作后,一个基本的模板就设计好了。剩下的工作就是将Template应用到一个GcMultiRow控件。我们在Form上添加一个GcMultiRow控件,然后将设计好的Template设置给他的Template属性,并且给GcMultiRow控件添加数据源,以及设置一些属性。
最后,可以在Form当中添加两个ToolStrip,用来展示导航和打印功能。之后运行工程,效果如下:
可以点击Form底部的按钮来切换上一个和下一个记录,通过Form顶部的按钮来预览打印效果。
值得一提的是,上面应用程序仅仅显示了GcMultiRow控件当中的一个Row,也就是数据表当中的一条记录,我将Form的大小调节的刚好跟一个Row的大小相当,因此每次可以浏览一个Row,通过点击导航条上面的按钮,可以使用GcMultiRow提供的按行滚动的效果,看起来就像是一条一条在浏览。这时候,如果你将Form高度拉大,你会看到多个Row存在于Form之上,就像一个一个卡片一样,请看下图:
你也可以保持Form上面不管如何放缩都保持只有一个Row,这个需要写几行代码,在这里我就不演示了,如果感兴趣,可以访问GCDN的MulitRow专区,我们可以一起讨论一些细节的问题。
MultiRow也提供了打印功能,以及各种打印模式和设置,下面是使用SingleRow打印模式,保证每页只打印一条记录,打印预览效果如下所示:
如果满意的话,直接打印好了~