以前看过泡泡的关于表各窗口表中的列宽 的保存的视频,收获不小,但此方法存在一个问题:
1、如果项目是第一次使用话保存的本地参数为空,会导致获取表列宽失败,而导致窗口副本表显示不正常,
2、如果系统有多个客户端使用,每个客户端第一次使用都会获取参数为空,
3、如果存在多个窗口的副本表会重复写很多代码
综合以上问题,故考虑用数据表加自定义函数来存放各个副本表的列宽,在窗口打开的时候判断当前打开窗口,及来源表是哪个,副本表的名称,来获取数据表的列宽,从来达到设置当前窗口的列宽
实现方法:
1、定义保存列宽、和获取列宽函数
保存:
Dim ck As String = args(0) '窗口名称
Dim bm As String = args(1) '窗口表名
Dim zb As String = args(2) '数据主表
Dim r As DataRow = DataTables("窗口表列宽").Find("窗口名称='" & ck & "' And 窗口表名='" & bm & "' And 数据表名= '" & zb & "'")
If r IsNot Nothing
r("列配置") =Tables(ck & "_" & bm).GetColVisibleWidth()
Else
MessageBox.Show("未找到表的默认值")
End If
Return Nothing
读取:在窗口打开时候执行
Dim ck As String = args(0) '窗口名称
Dim bm As String = args(1) '窗口表名
Dim zb As String = args(2) '数据表名
Dim r As DataRow = DataTables("窗口表列宽").Find("窗口名称='" & ck & "' And 窗口表名='" & bm & "' And 数据表名= '" & zb & "'")
If r IsNot Nothing
If r.IsNull("列配置")= False
Return r("列配置")
Else
Return r("默认值")
End If
Else
MessageBox.Show("缺少默认参数","提示",MessageBoxButtons.OK)
End If
此主题相关图片如下:qq截图20140925151450.png
2、在主表的表事件afterResizecolumn 中添加代码:
If Forms("资产增加").Opened Then
Functions.Execute("保存列宽","资产增加","table1","资产主表")
End If
如果有多个窗口复制上面的代码,判断窗口打开名称
3、新建保存列宽的数据表:
此主题相关图片如下:qq截图20140925151827.png
4、在窗口打开执行函数:
Tables(e.Form.Name & "_table1").SetColVisibleWidth(Functions.Execute("获取列宽",e.Form.Name,"Table1","资产主表"))
如果新添加新窗口需要在第2步中加上窗口是否打开判断和第3步的表中添加窗口名称,窗口表名,数据表名,以及默认列宽 ,然后在新的窗口中的afterload事件中添加第4步代码即可,
通过以上几步就可以实现在任意窗口打开表保存上次表的列宽
扩展:如何让不同的用户有不同的配置应该如何实现?
其实很简单只需要在第三步表中加上用户名称,将函数那里再添加一个用户过滤条件就可以了,再延伸一点可以将窗口的要显示 的列,以及列宽全部保存到数据表中,这样可以实现隐藏列及调整列宽功能
抛砖引玉,希望大家能在此基础之上实现更强功能
附加示例文件,请下载
[此贴子已经被作者于2014-9-25 15:53:25编辑过]