以文本方式查看主题 - Foxtable(狐表) (http://www.foxtable.com/bbs/index.asp) -- 专家坐堂 (http://www.foxtable.com/bbs/list.asp?boardid=2) ---- 如何实现多用户管理 (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=153694) |
|
-- 作者:吃亏是福 -- 发布时间:2020/8/19 17:33:00 -- 如何实现多用户管理 我们现在有23个用户,每个人一张表。 如何实现: 其中一部分人能看到其他人的22张表, 其中一部分人不可以看到别人的表, 每个人的表只能在规定的日期内填写与修改自己的表,过了一定的实效就不可以修改。 |
|
-- 作者:有点蓝 -- 发布时间:2020/8/20 8:43:00 -- 参考:http://www.foxtable.com/webhelp/topics/2267.htm |
|
-- 作者:吃亏是福 -- 发布时间:2020/8/21 14:46:00 -- DataRowAdding为什么不执行??? e.DataRow("填报人") = User.name e.DataRow("日期") = Date.Today() e.DataRow("序号") = e.DataTable.Compute("Max(序号)") + 1 If e.DataTable.DataRows.Count = 0 Then \'如果是一个空表 Return \'那么返回 End If Dim dr As DataRow = e.DataTable.DataRows(e.DataTable.DataRows.Count - 1) \'获得最后一行 For Each dc As DataCol In e.DataTable.DataCols e.DataRow(dc.Name) = dr(dc.Name) \'将最后一行的内容复制到新增行中. Next 以上是我在数据表“工作日志基础数据”的DataRowAdding的内容,但是做完之后没有任何错误提示,也没有任何变化
[此贴子已经被作者于2020/8/21 14:50:50编辑过]
|
|
-- 作者:有点蓝 -- 发布时间:2020/8/21 14:57:00 -- 注意DataTable的最后一行不一定是Table的最后一行 If e.DataTable.DataRows.Count > 0 Then \'如果不是一个空表 Dim dr As DataRow = e.DataTable.DataRows(e.DataTable.DataRows.Count - 1) \'获得最后一行 For Each dc As DataCol In e.DataTable.DataCols e.DataRow(dc.Name) = dr(dc.Name) \'将最后一行的内容复制到新增行中. Next End If
|
|
-- 作者:有点蓝 -- 发布时间:2020/8/21 15:00:00 -- 如果要使用Table的最后一行,改为 Dim dr As DataRow = Tables(e.DataTable.Name).Rows(Tables(e.DataTable.Name).Rows.Count - 1).DataRow \'获得最后一行 |
|
-- 作者:吃亏是福 -- 发布时间:2020/8/24 14:34:00 -- 按设计步骤做完不执行 设计步骤: 1、首先在用户管理中,加上每个填报人: 2、然后在订单表的DataRowAdding事件 中加入代码: e.DataRow("填报人") = User.name 这样新增订单的时候,会自动在业务员列填入当前登录用户名。 3、最后将订单表的PrepareEdit事件设置为:
此主题相关图片如下:微信图片_20200824143235.png If e.Row("填报人")
<> User.Name
Then |
|
-- 作者:有点蓝 -- 发布时间:2020/8/24 14:39:00 -- 这个窗口是用来执行数据库sql语句的,不是执行代码的。代码直接写在代码编辑器即可。 初学者建议先按顺序学习一下基础:http://www.foxtable.com/webhelp/topics/1592.htm
|
|
-- 作者:吃亏是福 -- 发布时间:2020/8/26 14:18:00 -- 结账列如何自动返回True??? 表事件
工作日志基础数据_PrepareEdit
If User.Name = "管理员"
Then \'如果是管理员 If e.Row("结账") = True Then \'此订单已经结账 Dim tv As Date = e.Row("日期") Dim tp As TimeSpan = Date.Today - tv If tp.TotalDays >= 10 Then \'如果订单已经超过10天 e.Row("结账") = True \'则结账列自动返回True??? e.Cancel = True \'则取消编辑 End If End If ElseIf e.Row("填报人")
<> User.Name Then \'如果是其他用户,且填报人和登录用户名不同 e.Cancel = True \'则取消编辑 [此贴子已经被作者于2020/8/26 14:27:42编辑过]
|
|
-- 作者:有点蓝 -- 发布时间:2020/8/26 14:29:00 -- 表格不同事件有不同的使用场合,如果要改变其它列值,应该放到datacolchanged事件处理,而不是PrepareEdit事件 另外【自动返回True】指什么?没看懂
|
|
-- 作者:吃亏是福 -- 发布时间:2020/8/26 15:18:00 -- datacolchanged事件处理 假定在数据表中,有一逻辑型数据列,列名为“结帐”,我们希望对于每一个结帐的行,是否能够自动通过大于10天则审核(锁定),以免被误编辑。 表事件
工作日志基础数据_PrepareEdit
If User.Name = "管理员"
Then \'如果是开发者或者是管理员 If e.Row("结账") = True Then \'此订单已经结账 Dim tv As Date = e.Row("日期") Dim tp As TimeSpan = Date.Today - tv If tp.TotalDays >= 10 Then \'如果订单已经超过10天 e.Row("结账") = True \'则结账列返回True e.Cancel = True \'则取消编辑 End If End If ElseIf e.Row("填报人")
<> User.Name Then \'如果是其他用户,且填报人和登录用户名不同 e.Cancel = True \'则取消编辑 End If
工作日志基础数据_DataColChanged
If e.DataCol.Name = "结帐"
Then \'如果是已结帐列的内容变动 If e.NewValue = True Then \'而且变动后的值是True(已勾选) Dim tv As Date = e.DataRow("日期")
Dim tp As TimeSpan = Date.Today - tv If tp.TotalDays >= 10 Then \'如果订单已经超过10天 e.DataRow.Locked = True \'那么锁定此行 End If End If End If
工作日志基础数据_DataRowAdding
e.DataRow("填报人") =
User.name \'新增行.20200826 e.DataRow("日期") =
Date.Today() e.DataRow("编号") =
e.DataTable.Compute("Max(编号)") + 1
|