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


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

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

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


加好友 发短信
等级:幼狐 帖子:51 积分:474 威望:0 精华:0 注册:2020/8/19 17:19:00
如何实现多用户管理  发帖心情 Post By:2020/8/19 17:33:00 [显示全部帖子]

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

如何实现:

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

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

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


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


加好友 发短信
等级:幼狐 帖子:51 积分:474 威望: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编辑过]

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


加好友 发短信
等级:幼狐 帖子:51 积分:474 威望: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
图片点击可在新窗口打开查看


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


加好友 发短信
等级:幼狐 帖子:51 积分:474 威望: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编辑过]

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


加好友 发短信
等级:幼狐 帖子:51 积分:474 威望: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

 


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


加好友 发短信
等级:幼狐 帖子:51 积分:474 威望:0 精华:0 注册:2020/8/19 17:19:00
'锁定此行有效果,但是过十天的行,“结账”列没有自动勾选,该行也没有锁定  发帖心情 Post By:2020/8/27 15:36:00 [显示全部帖子]

项目事件

AfterOpenProject

DataTables("工作日志基础数据").DataCols("日期").RaiseDataColChanged

LoadUserSetting

If User.Name = "管理员" Then
    DataTables("工作日志基础数据").LoadFilter = ""
Else
    DataTables("工作日志基础数据").LoadFilter = "填报人 = '" & User.Name & "'"
End If
DataTables("工作日志基础数据").Load()

表事件

工作日志基础数据_DataColChanged

If e.DataCol.Name = "日期" Then '如果是已结帐列的内容变动
    If e.DataRow.isnull("日期")=False 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

[此贴子已经被作者于2020/8/27 15:40:55编辑过]

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


加好友 发短信
等级:幼狐 帖子:51 积分:474 威望:0 精华:0 注册:2020/8/19 17:19:00
“结账”列,还是没有自动挑√  发帖心情 Post By:2020/8/27 17:00:00 [显示全部帖子]

项目事件

 

LoadUserSetting

 

If User.Name = "管理员" Then

    DataTables("工作日志基础数据").LoadFilter = ""

Else

    DataTables("工作日志基础数据").LoadFilter = "填报人 = '" & User.Name & "'"

End If

DataTables("工作日志基础数据").Load()

DataTables("工作日志基础数据").DataCols("日期").RaiseDataColChanged

 

 

表事件

 

工作日志基础数据_DataColChanged


If e.DataCol.Name = "结账" Then '如果是已结帐列的内容变动

    If e.NewValue = True Then '而且变动后的值是True(已勾选)

        If e.DataRow.isnull("结账")=False 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

End If

 

工作日志基础数据_DataRowAdding

 

e.DataRow("填报人") = User.name '新增行.20200826

e.DataRow("日期") = Date.Today()

e.DataRow("编号") = e.DataTable.Compute("Max(编号)") + 1

 

工作日志基础数据_DataRowLockedChanging

 

If e.DataRow("结账") = False Then  '未审核通过的行

    If e.DataRow.Locked  = False Then '如果此行目前未锁定,也就是准备锁定此行

        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

        Messagebox.show("不能锁定未审核通过的行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)

        e.Cancel = True

    End If

ElseIf e.DataRow("结账") = True Then '已经结账通过的行

    If e.DataRow.Locked  = True Then '如果此行已锁定,也就是准备取消锁定此行

        If User.Group <> "管理员" Then

            Messagebox.show("只有管理员才能解锁已经审核通过的行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)

            e.Cancel = True

        End If

    End If

End If

 


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


加好友 发短信
等级:幼狐 帖子:51 积分:474 威望:0 精华:0 注册:2020/8/19 17:19:00
运行时报错  发帖心情 Post By:2020/8/27 19:26:00 [显示全部帖子]

.NET Framework 版本:4.0.30319.36543
Foxtable 版本:2020.5.29.8
错误所在事件:表,工作日志基础数据, DataColChanged
详细错误信息:
Exception has been thrown by the target of an invocation.
Operator '=' is not defined for type 'Date' and type 'Boolean'.

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


加好友 发短信
等级:幼狐 帖子:51 积分:474 威望:0 精华:0 注册:2020/8/19 17:19:00
  发帖心情 Post By:2020/8/27 19:35:00 [显示全部帖子]

表事件

 

工作日志基础数据_DataColChanged

 

If e.DataCol.Name = "结账" OrElse e.DataCol.Name = "日期" Then '如果是已结帐列的内容变动

    

    If e.NewValue = True AndAlso e.DataRow.isnull("日期") = False Then '而且变动后的值是True(已勾选)

        

        Dim tv As Date = e.DataRow("日期")

        

        Dim tp As TimeSpan = Date.Today - tv

        

        If tp.TotalDays >= 10 Then '如果订单已经超过10天

            

            e.DataRow.Locked = False '那么锁定此行

            

        End If

        

    End If

    

End If

 

工作日志基础数据_DataRowAdding

 

e.DataRow("填报人") = User.name '新增行.20200826

 

e.DataRow("日期") = Date.Today()

 

e.DataRow("编号") = e.DataTable.Compute("Max(编号)") + 1


项目事件

 

LoadUserSetting

 

If User.Name = "管理员" Then

    DataTables("工作日志基础数据").LoadFilter = ""

Else

    DataTables("工作日志基础数据").LoadFilter = "填报人 = '" & User.Name & "'"

End If

DataTables("工作日志基础数据").Load()

DataTables("工作日志基础数据").DataCols("日期").RaiseDataColChanged


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


加好友 发短信
等级:幼狐 帖子:51 积分:474 威望:0 精华:0 注册:2020/8/19 17:19:00
如何实现超过十天,自动结账,并锁定该行  发帖心情 Post By:2020/8/28 10:34:00 [显示全部帖子]

表事件
工作日志基础数据_DataColChanged
If e.DataCol.Name = "结账" Then '如果是已结帐列的内容变动
    If e.NewValue = True Then '而且变动后的值是True(已勾选)
        If e.DataRow("结账") = True AndAlso e.DataRow.isnull("日期") = False 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
End If

以上能实现超过十天,手动结账后,自动锁定该行。
我想实现,超过十天,自动结账,并锁定该行。请问如何实现?多谢!!!

 回到顶部
总数 14 1 2 下一页