以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [分享]解决各窗口不能保存表列宽的问题,希望对各位有用 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=57492) |
-- 作者:unverse -- 发布时间:2014/9/25 15:43:00 -- [分享]解决各窗口不能保存表列宽的问题,希望对各位有用 以前看过泡泡的关于表各窗口表中的列宽 的保存的视频,收获不小, 但此方法存在一个问题: 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 2、在主表的表事件afterResizecolumn 中添加代码: If Forms("资产增加").Opened Then Functions.Execute("保存列宽","资产增加","table1","资产主表") End If 如果有多个窗口复制上面的代码,判断窗口打开名称 3、新建保存列宽的数据表: 4、在窗口打开执行函数: Tables(e.Form.Name & "_table1").SetColVisibleWidth(Functions.Execute("获取列宽",e.Form.Name,"Table1","资产主表")) 如果新添加新窗口需要在第2步中加上窗口是否打开判断和第3步的表中添加窗口名称,窗口表名,数据表名,以及默认列宽 ,然后在新的窗口中的afterload事件中添加第4步代码即可, 通过以上几步就可以实现在任意窗口打开表保存上次表的列宽 扩展:如何让不同的用户有不同的配置应该如何实现? 其实很简单只需要在第三步表中加上用户名称,将函数那里再添加一个用户过滤条件就可以了,再延伸一点可以将窗口的要显示 的列,以及列宽全部保存到数据表中,这样可以实现隐藏列及调整列宽功能 抛砖引玉,希望大家能在此基础之上实现更强功能 附加示例文件,请下载 [此贴子已经被作者于2014-9-25 15:53:25编辑过]
|
-- 作者:有点甜 -- 发布时间:2014/9/25 15:46:00 -- 很好 |
-- 作者:lsy -- 发布时间:2014/9/25 15:53:00 -- 好。 |