前言
目前大部分需要服务端的PC程序都用B/S方式来实现了,Java做服务端,分离的前端用JS框架,这在电商/云服务上用的比较普遍。但是有相当一部分程序,特别是对交互性要求较高的程序,像各行各业的ERP,比如HIS,各种收银系统,还有工业控制相关的上层应用依然要用C/S方式来实现。涉及到硬件通讯的上层应用基本都是用Windows全家桶。这是因为任何硬件设备开发出来,都要提供Windows驱动。虽然用Java+B/S的方式也能绕个弯实现对接,但整体用Windows程序无疑是最正宗的解决方案。尽管大家对Windows吐槽很多,不过吐槽归吐槽,装新电脑时大家不声不响的又装上了Windows。谁叫它经营几十年,市场占有率那么高呢,只能从善如流吧。
Windows上层应用程序一般用C#实现,涉及到数据展示方面一般都会用表格类控件DataGridView, 不过对于一个有经验有追求的程序员来说,一定不满足于微软自带的那个DataGridView,因为这个控件实在太简陋了,界面单调呆板不说,很多功能都没有,只有一些基本的功能。这里向大家推荐比较牛逼的一个第三方控件 Infragistics UltraGrid,有着非常强大的功能,能实现表格中植入控件,分组统计以及各种非常炫目的UI设置。。。
Infragistics UI Controls and Tools For Developers and UX Pros是一个专门制作第三方UI控件的公司,已经做了很多年了,功能能稳定性方面这个不用怀疑。虽然国内用的不多,不过鉴于其强大的功能,如果你用上了,一定会爱不释手。
其它的控件你可以不用,但这里面的UltraGrid表格控件是其核心。不得不了解。
怎么安装这里不做赘述,网上自己去搜一下。也别问我怎么破解,希望大家支持正版,我只是自己学习使用啊。
UltraGrid随着套件的版本也更新了很多版了, 新的版本跟老版本大体相同,但增加了很多内容。
其中有一个问题点很有必要吐槽一下,下面细说。
UltraGrid入门
安装完后,一个新手一定迫不及待的想看看这个控件怎么使用,怎么看呢?
先从左边工具箱拖过来呗,OK 我们先把UltraGrid拖过来,这时系统会自动出现一个Wizard对话框,引导你如何往下走。
第一步选择
这个时候你的选择比较重要,一定不能关闭后等后面再设属性,一定要这时候把第一步选好:
注意这里一定选择第3项,意思时手动设置列,不要选择上面的通过创建DataSource自动产生列。手动设置的过程如下,
列定义
在这里先定义几个列,主要声明一下Key 属性,如果你绑定的是数据库来的DataTable,就填数据库表字段名。这里至少要声明一个字段,后面可以再加减都行。
不入误区
如果我们不选第3项会怎样呢?假设你没选第3项直接跳到结尾。等到后面再右键打开属性框会怎样呢,
按照我们的经验,这时选择手动设置列
设完点下面OK按钮
这时会弹出一个这样的对话框。
没地方关闭,前面设置的列也无法保存。只能作废,初学者很容易再这个地方就卡住了。文字的意思大概能看懂,但是既然都是手工定义,这里为什么要卡住用户,笔者也不知道原因。
因此一定要在拖放后第一步就选择第3项设置字段列。
列头设置
好,设置完字段列之后,对我们来说比较重要的一步就这是列头的文字了。这个设置再这里:
右键打开属性窗口,左边选择Bind[0].Columns, 中间选择某个字段,右边选择Header.Caption填写即可。
其它常用设置
UltraGrid的设置非常多,我们再列几个常用的,每一个设置既可以用代码实现,也可以在属性窗口能找到对应位置,限于篇幅,下面的设置不再一一给出截图。读者很容易通过代码找到属性窗口位置。
只选中单行(默认多行)
有时不想用户选择多行,希望只选择一行。
ultraGrid1.DisplayLayout.Override.SelectTypeRow = SelectType.Single;
只允许行高亮
有时我们不希望用户编辑表格,只允许行高亮,格子不高亮也不显示光标, 选择设为行模式,设置如下:
ultraGrid1.DisplayLayout.Bands[0].Override.CellClickAction = CellClickAction.RowSelect;
ultraGrid1.DisplayLayout.Override.AllowUpdate = DefaultableBoolean.False;
表格左侧留白
如果希望表格编辑,我们希望左边留白一点点,高亮行显示一个小三角。英文叫RowSelector:
ultraGrid1.DisplayLayout.Override.RowSelectors = DefaultableBoolean.True;
改变默认的行背景色
默认选中时Windows背景蓝,前景白。设置如下:
ultraGrid1.DisplayLayout.Override.ActiveRowAppearance.BackColor=Color.PapayaWhip;
ultraGrid1.DisplayLayout.Override.ActiveRowAppearance.ForeColor=Color.Black;
ultraGrid1.DisplayLayout.Override.SelectedRowAppearance.BackColor=Color.PapayaWhip;
表头占满空间
如果字段比较少,右边空着会很难看,这时我们希望表头及数据自动占满宽度,字段多时不要用:
ultraGrid1.DisplayLayout.AutoFitStyle = AutoFitStyle.ResizeAllColumns;
ultraGrid1.DisplayLayout.Bands[0].Override.ColumnAutoSizeMode = ColumnAutoSizeMode.AllRowsInBand;
排序处理
单字段排序,在每个Columns里面设SortIndicator
ultraGrid.DisplayLayout.Bands[0].Columns["Name"].SortIndicator = SortIndicator.Ascending;
多字段排序(只能代码实现):
ultraGrid1.DisplayLayout.Bands[0].SortedColumns.Add("sort1", false, true);
ultraGrid1.DisplayLayout.Bands[0].SortedColumns.Add("sort2", false, true);
设置某列为只读
有时我们希望某一列为只读,设置如下:
ultraGrid1.DisplayLayout.Bands[0].Columns[columnName].CellActivation = Activation.NoEdit;
允许Grid新增行
表格编辑模式时,我们希望设置允许用户新增数据,这是系统会自动加新行,新行你可以选择加在第1行之前或者最后一行之后。我一般是选择加在最后一行下面:
ultraGrid1.DisplayLayout.Bands[0].Override.AllowAddNew = AllowAddNew.TemplateOnBottom;
允许Grid删除行
表格编辑状态时,允许删除行。
ultraGrid1.DisplayLayout.Bands[0].Override.AllowDelete = DefaultableBoolean.True;
交替背景色
有时我们希望表格显示交替背景色,这样会更加美观。这个只能通过代码实现,也比较简单,就是实现一个事件:
private void UltraGrid1_InitializeRow(object sender, InitializeRowEventArgs e)
{
if (e.Row.ListIndex % 2 == 1)
{
e.Row.Appearance.BackColor = Color.WhiteSmoke; // or any shade of gray you prefer
}
else
{
e.Row.Appearance.ResetBackColor();
}
}
总结
本文概述了如何进行Infragistics UltraGrid 的基本使用,如果不是大强度使用,这些基本够了。基本设置完之后,我们通过常规步骤访问数据库得到一个DataTable,绑定上去就可以愉快的看到结果了:
ultraGrid1.DataSource = dataTable1;
后面我们会介绍更高级的应用。