系统筛选是我们平台为了结合用户权限、数据限定加载而设计的一个非常实用的功能。它可以给主表加载数据添加一个全局的筛选条件。即窗体打开之后,数据表后续的所有筛选动作都会带上这个系统筛选条件,即这个筛选条件会一直有效,一直到关闭这个窗口这个表。
隐藏式和可选择系统筛选
系统筛选有两种使用方式,一种是隐藏式的单个系统筛选,还有一种供用户在不同筛选方案之间切换的可选择系统筛选。
(可选择系统筛选)
隐藏式系统筛选的特点是,当你的筛选条件只有一种方案,并且不希望显示到主界面让用户看到时就可以选择此方案。
如果你希望提供多种筛选方案给用户,让用户可以在不同的筛选方案之间自由地切换,那么我们就可以用可选择系统筛选。可选择系统筛选我们是可以根据角色、用户设置权限的。这让我们做系统更具想象力,可以做到更多更灵活的控制。
设置启用
隐藏式系统筛选设置很简单,可以在表属性的下图位置设置一个单独的表达公式即可。
可选择系统筛选在表属性设置窗口的顶层菜单“系统筛选”中打开“系统筛选方案”窗口。这里可以设置多个筛选方案。
打开“系统筛选方案”窗口
表达公式
系统筛选使用的是“表达公式”,用的是VB.Net语法。所以可以很灵活地实现比较复杂的权限限制。比如:
a、只加载自己创建的记录。"CreateUser='" + Proj.User.UserID + "'"
b、只加载本部门的记录。"DepartmentID='"+ Proj.User.GroupID + "'"
c、只加载分公司的记录。"CompanyID='" + Proj.User.CompanyID + "'"
d、只加载部分状态的订单。"Status=1"
这里我们要注意的是,由于系统筛选是在表加载之前使用的,所以表达公式里面使用的CurrRow和CurrGrid两个对象我们无法使用,对应的“[列名称]”这种引用方式也不能使用了。方括号也不要用了。
我们应该清楚一点的是,这里的表达公式最终运行结果返回的是一个符合SQL语句语法的字符串。SQL语句语法是根据当前主表所对应的数据库类型来的。
我们既可以直接写一个带双引号的字符串,比如:"danjia>0"
或者是表达公式执行结果返回的是一个字符串。
"创建者='" & Proj.User.UserID & "'"
检验
我们的表达公式写好了,该如何确认我们写的公式是否正确呢?我们上面说过,表达公式执行结果返回的是一个字符串。所以我们可以将写的表达公式放到命令窗口中去执行一下,看看结果。
Dim strWhere As String="创建者='" & Proj.User.UserID & "'"
Proj.MsgDebug.Add(strWhere)
代码控制
有时候我们希望系统筛选可以暂时失效,让我们可以越过系统筛选的限制去数据库中查询筛选到相应的数据,那我们该如何做呢?这里就只能通过代码来控制了。
Vb.Net |
'先定义一个变量保存之前的系统筛选 Dim strSysFilter As String=tbl.SysFilter '清空系统筛选的影响 tbl.SysFilter="" '去除系统筛选的限制,根据高级筛选、简单筛选等等现有的筛选条件从后台重新筛选刷新加载数据 tbl.ReloadData() '再恢复系统筛选 tbl.SysFilter=strSysFilter |
C# |
// 先定义一个变量保存之前的系统筛选 string strSysFilter = tbl.SysFilter; // 清空系统筛选的影响 tbl.SysFilter = ""; // 去除系统筛选的限制,根据高级筛选、简单筛选等等现有的筛选条件从后台重新筛选刷新加载数据 tbl.ReloadData(); // 再恢复系统筛选 tbl.SysFilter = strSysFilter; |