Dim r As DataRow = DataTables("窗口表列宽").Find("用户名='" & un & "' And 数据表名= '" & zb & "'")
For Each dt As DataTable In DataTables
dt.GlobalHandler.AfterDragColumn = True
dt.GlobalHandler.AfterResizeColumn = True
Next
此主题相关图片如下:项目代码1.png
2、项目事件:AfterOpenProject
For Each dt As Table In Tables
Tables(dt.Name).SetColVisibleWidth(Functions.Execute("表获取列宽", user.Name, dt.Name))
Next
If User.Type <> UserTypeEnum.Developer Then
Tables("窗口表列宽").Visible = False '隐藏防止意外修改,只开发者可见
End If
此主题相关图片如下:项目代码2.png
3、项目事件:BeforeLoadOuterTable
Select Case e.DataTableName
Case "窗口表列宽" '窗口表列宽表无条件加载,避免未加载不能使用
End Select
此主题相关图片如下:项目代码3.png
4、全局表事件:
AfterDragColumn ----鼠标拖动列标题,调整位置之后发生
Functions.Execute("表保存列宽", user.Name,CurrentTable.Name)'函数名,用户名,数据表
AfterResizeColumn-----用鼠标拖动列标题边界,调整列宽之后发生
Functions.Execute("表保存列宽", user.Name,CurrentTable.Name)'函数名,用户名,数据表
此主题相关图片如下:项目代码4.png
四、窗口表设置,在窗口AfterLoad事件中设置函数。即使你最初的想法只想调整窗口表的列宽和顺序,前面的操作步骤仍然需要,但或许你可以自己简化。
Dim Result As DialogResult
Result = MessageBox.Show("是否选择自定义列方式打开?选否原表格式打开", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If Result = DialogResult.Yes Then '选是则用自定义列方式也就是保存的窗口表列设置来打开
Tables(e.Form.Name & "_table1").SetColVisibleWidth(Functions.Execute("表获取列宽", user.Name, e.Form.Name & "_table1"))
Tables(e.Form.Name & "_table2").SetColVisibleWidth(Functions.Execute("表获取列宽", user.Name, e.Form.Name & "_table2"))
Else '选否则用原表格式也就是保存的窗口副本表对应的原表的列设置来打开
Tables(e.Form.Name & "_table1").SetColVisibleWidth(Functions.Execute("表获取列宽", user.Name, Tables(e.Form.Name & "_table1").DataTable.Name))
Tables(e.Form.Name & "_table2").SetColVisibleWidth(Functions.Execute("表获取列宽", user.Name, Tables(e.Form.Name & "_table2").DataTable.Name))
End If
4.1、此方式下窗口表通过绑定表的表属性中显示列进行的设置不再生效
4.2、此方式下窗口表通过绑定表的表属性--杂项--允许单击排序注意要设置为否,否则窗口表不能通过拖动来调整列的顺序,那将非常不方便,但可以调整列宽。
4.3、这里是举例是针对窗口绑定来的设置,独立窗口的表获取列宽的函数可能有点变化,将不再是绑定表的表达方式,而是所有者表的表达方式
4.4、举例的窗口中有2个绑定表,所以有两行(一行table1,一行table2),而且是两个方案所以用了IF函数,一直使用一种用IF中一个即可,就不会打开选择弹窗了。
4.5、没有全局窗口事件,所以有多少个窗口,就需要设置多少窗口,好在只设置一处窗口AfterLoad事件,而且代码都是一个,只需注意绑定了几个表。
此主题相关图片如下:窗口表列顺序和列宽调整.png
使用右键3的方式调整时,不能单纯只操作隐藏或取消隐藏,因为这样不会触发保存宽列的函数,操作完要拖动一下任一列的列宽,这样就会保存列宽数据了。
五:提醒如下:
表和窗口表的获取列宽函数,在调到时表名参数是不一样的,但这里已经处理好,直接复制即可以用。
函数引用帮助:Functions.Execute(函数名, 参数1, 参数2,
参数3....),解释如下
此主题相关图片如下:项目代码5.png
希望以上有帮助,我测试是没有问题的,如有请回复反馈。