动态列表项目之二
我们可以在上一节的基础上扩展一下,假定某些列的列表项目不是动态的,但是随着应用的深入,这些列的列表项目可能会需要调整,虽然通过列属性设置窗口,可以方便地重新设置列表项目。但是对于一个已经交付使用的系统来说,让最终用户可以随意设置列属性是有危险的,有没有安全一些的做法呢?有,通用的做法是:
1、新建一个表(假定表名为项目),包括三列,分别是表、列、列表项目,用于输入某表某列的列表项目:
2、然后在全局表事件PrepareEdit中加入如下代码:
If
e.IsFocusCell Then在项目事件Initialize加入代码,为所有的表开启全局表事件PrepareEdit:
For
Each dt
As
DataTable
In
DataTables
dt.GlobalHandler.PrepareEdit
=
True
Next
这样在编辑任何一列之前,都会根据表名和列名,在项目表检查是否存在对应的行,如果找到,将列表项目设为该行列表项目列的内容。
上面的代码简单实用,但是每次编辑单元格之前都去项目表检索一次,运行效率是比较低的。
我们可以删除全局表事件PrepareEdit和项目事件Initialize中的代码,改为在项目事件AfterOpenProject中加入下面的代码:
Dim
dt as DataTable = DataTables("项目")
这样在打开项目的时候,就会自动设置列表项目,这个设置是一次性的,所以运行效率要高很多;但是也有一个副作用,就是当你修改项目表的列表项目内容时,必须重新打开项目才会生效。
不过列表项目是不需要经常修改的,所以这不是一个大问题,如果你很在意的话,可以删除AfterOpenProject事件中的代码,改为在项目事件CurrentTableChanged中设置代码:
Dim
dt as DataTable = DataTables("项目")这样修改项目表中的列表项目后,无需重新打开项目即可生效。
一个小技巧:
我们一直用符号“|”来分隔列表项目,其实是可以用换行符分开的,这样我们可以更方便地录入列表项目,例如下图将列表项目列改为备注型,每行录入一个。