Foxtable(狐表)用户栏目专家坐堂 → 如何实现多用户管理


  共有731人关注过本帖树形打印复制链接

主题:如何实现多用户管理

帅哥哟,离线,有人找我吗?
吃亏是福
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:28 积分:269 威望:0 精华:0 注册:2020/8/19 17:19:00
如何实现多用户管理  发帖心情 Post By:2020/8/19 17:33:00 [只看该作者]

我们现在有23个用户,每个人一张表。

如何实现:

其中一部分人能看到其他人的22张表,

其中一部分人不可以看到别人的表,

每个人的表只能在规定的日期内填写与修改自己的表,过了一定的实效就不可以修改。


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:57342 积分:290623 威望:0 精华:8 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/8/20 8:43:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
吃亏是福
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:28 积分:269 威望:0 精华:0 注册:2020/8/19 17:19:00
DataRowAdding为什么不执行???  发帖心情 Post By:2020/8/21 14:46:00 [只看该作者]

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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:57342 积分:290623 威望:0 精华:8 注册:2015/6/24 9:21:00
  发帖心情 Post By: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

e.DataRow("填报人") = User.name
e.DataRow("日期") = Date.Today()
e.DataRow("序号") = e.DataTable.Compute("Max(序号)") + 1

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:57342 积分:290623 威望:0 精华:8 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/8/21 15:00:00 [只看该作者]

如果要使用Table的最后一行,改为

Dim dr As DataRow = Tables(e.DataTable.Name).Rows(Tables(e.DataTable.Name).Rows.Count - 1).DataRow '获得最后一行


 回到顶部
帅哥哟,离线,有人找我吗?
吃亏是福
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:28 积分:269 威望:0 精华:0 注册:2020/8/19 17:19:00
按设计步骤做完不执行  发帖心情 Post By:2020/8/24 14:34:00 [只看该作者]

设计步骤:

1、首先在用户管理中,加上每个填报人:

2、然后在订单表的DataRowAdding事件 中加入代码:

e.DataRow("填报人") = User.name

这样新增订单的时候,会自动在业务员列填入当前登录用户名。

3、最后将订单表的PrepareEdit事件设置为:


图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20200824143235.png
图片点击可在新窗口打开查看

If e.Row("填报人") <> User.Name Then
    e.Cancel =
True
End If
图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20200824143019.png
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:57342 积分:290623 威望:0 精华:8 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/8/24 14:39:00 [只看该作者]

这个窗口是用来执行数据库sql语句的,不是执行代码的。代码直接写在代码编辑器即可。

初学者建议先按顺序学习一下基础:http://www.foxtable.com/webhelp/topics/1592.htm

 回到顶部
帅哥哟,离线,有人找我吗?
吃亏是福
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:28 积分:269 威望:0 精华:0 注册:2020/8/19 17:19:00
结账列如何自动返回True???  发帖心情 Post By:2020/8/26 14:18:00 [只看该作者]

表事件

 

工作日志基础数据_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
[此贴子已经被作者于2020/8/26 14:27:42编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:57342 积分:290623 威望:0 精华:8 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/8/26 14:29:00 [只看该作者]

表格不同事件有不同的使用场合,如果要改变其它列值,应该放到datacolchanged事件处理,而不是PrepareEdit事件

另外【自动返回True】指什么?没看懂

 回到顶部
帅哥哟,离线,有人找我吗?
吃亏是福
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:28 积分:269 威望:0 精华:0 注册:2020/8/19 17:19:00
datacolchanged事件处理  发帖心情 Post By:2020/8/26 15:18:00 [只看该作者]

定在数据表中,有一逻辑型数据列,列名为“结帐”,我们希望对于每一个结帐的行,是否能够自动通过大于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

 


 回到顶部
总数 25 1 2 3 下一页