以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  帮忙写代码  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=2758)

--  作者:shixia
--  发布时间:2009/5/12 11:05:00
--  帮忙写代码
只有主任、副主任用户组可以操作“审核”,其它用户组不能操作“审核”,当审核为TRUE时,“工作人员”表实图中除7个字段外,其它字段不能被“工作人员”用户组修改,7个字段为:开票形式、票据号码、发票日期、已交财务、联系人、文书、照片。这7个字段当“工作人员”用户组操作后不为空后,下次再进入程序又被锁定,不能修改,只有非“工作人员”用户组权限进入后,把“审核”变为False后,才能由非“工作人员”用户组修改所有被锁定的行。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:认证中心信息管理.table


--  作者:狐狸爸爸
--  发布时间:2009/5/12 12:19:00
--  

1、只有主任、副主任用户组可以操作“审核”,其它用户组不能操作“审核”,

BeforeLockDataRow

锁定某行(通过审核)之前执行,可以在此处进行权限和逻辑验证,决定是否允许即将进行的锁定行操作。

e参数属性: 

DataTable:返回要锁定行的数据表。
DataRow:  返回要锁定的数据行。
Cancel:    逻辑型,设为True,取消即将进行的锁定行操作。

示例

假定只允许经理级别的用户锁定行,可以设置BeforeLockDataRow事件代码为:

If User.Group <> "经理" Then
    e.Cancel =
True
End
If


--  作者:狐狸爸爸
--  发布时间:2009/5/12 12:23:00
--  
2、工作人员”表实图中除7个字段外,其它字段不能被“工作人员”用户组修改,7个字段为:开票形式、票据号码、发票日期、已交财务、联系人、文书、照片

PrepareEdit

准备编辑单元格的时候执行。

e参数属性:

Table:       准备编辑的表
Row:         准备编辑的行
Col:         准备编辑的列
IsFocusCell: 逻辑型,是否是焦点单元格   
Cancel:      逻辑型,默认为False,设为True取消编辑。



if user.Group = "工作人员"
    Select Case e.Col.Name
        case "开票形式","票据号码","发票日期","已交财务","联系人","文书","照片","审核"
        e.Cancel = true
    end Select
End IF

--  作者:狐狸爸爸
--  发布时间:2009/5/12 12:26:00
--  

3、这7个字段当“工作人员”用户组操作后不为空后,下次再进入程序又被锁定,不能修改,只有非“工作人员”用户组权限进入后,把“审核”变为False后,才能由非“工作人员”用户组修改所有被锁定的行。

PrepareEdit

准备编辑单元格的时候执行。

e参数属性:

Table:       准备编辑的表
Row:         准备编辑的行
Col:         准备编辑的列
IsFocusCell: 逻辑型,是否是焦点单元格   
Cancel:      逻辑型,默认为False,设为True取消编辑。


    Select Case e.Col.Name
        case "审核"
             if user.Group = "工作人员"
                e.Cancel = True
             end if
        case "开票形式","票据号码","发票日期","已交财务","联系人","文书","照片"

            if user.Group = "工作人员" AndAlso e.Row("审核") = False
                 e.Cancel = true
            end if
    end Select

[此贴子已经被作者于2009-5-12 12:34:11编辑过]

--  作者:狐狸爸爸
--  发布时间:2009/5/12 12:35:00
--  
另BeforeSaveDataRow中的代码,可以这样写,因为判断空值影坛该用IsNull:

Dim d As DataRow = e.DataRow
Dim ColNames() AS String = "文号,项目名称,委托类别,委托单位,来源单位,标的物,标的额".Split(",")
For Each ColName AS String In ColNames
    if d.IsNull(ColName) Then
        MessageBox.Show("请详细完整地填写所有资料","存盘失败",MessageBoxButtons.OK,MessageBoxIcon.Exclamation) \'提示用户
        Dim Index As Integer
        Index = Tables("收入").FindRow(e.DataRow) \'找出此行在收入数据Table中的位置
        If Index > -1 Then \'如果找到此行
            Tables("收入").Position = Index \'将焦点定位到此行
        End If
        Maintable = Tables("收入") \'选择收入数据表作为主表.
        e.Cancel = True \'取消存盘
        exit for
    End If
Next
[此贴子已经被作者于2009-5-12 12:40:08编辑过]

--  作者:shixia
--  发布时间:2009/5/23 10:20:00
--  
Dim ColNames() AS String = "文号,项目名称,委托类别,委托单位,来源单位,标的物,标的额".Split(",")
For Each ColName AS String In ColNames

我记得你在帮助中讲:

集合

集合类似于数组,但是比数组更为灵活,定义集合的语法是:

Dim 集合名称 As New List(Of 数据类型)


For Each 语句

For Each 语句用来访问一个现有的集合 ,语法为:

For Each 循环变量 In 集合
    代码

Next


数组的定义方式之一为:

可以在定义数组的时候,直接给数组元素赋值,例如:

Dim Values() As Integer = {1,3,5}

你定义的Dim ColNames() AS String = "文号,项目名称,委托类别,委托单位,来源单位,标的物,标的额".Split(",")  是一个数组还是集合,如果是数组又用For Each来访问,如果是组合又不符合集合的定义语法,请狐爸给讲讲

--  作者:lxl
--  发布时间:2009/5/23 12:55:00
--  
以下是引用shixia在2009-5-23 10:20:00的发言:

我记得你在帮助中讲:

集合

集合类似于数组,但是比数组更为灵活,定义集合的语法是:

Dim 集合名称 As New List(Of 数据类型)


For Each 语句

For Each 语句用来访问一个现有的集合 ,语法为:

For Each 循环变量 In 集合
    代码

Next


数组的定义方式之一为:

可以在定义数组的时候,直接给数组元素赋值,例如:

Dim Values() As Integer = {1,3,5}

你定义的Dim ColNames() AS String = "文号,项目名称,委托类别,委托单位,来源单位,标的物,标的额".Split(",")  是一个数组还是集合,如果是数组又用For Each来访问,如果是组合又不符合集合的定义语法,请狐爸给讲讲


估计狐爸过周末去了,我代劳了吧:
String.Split 返回的是数组。
数组也可以用For Each  来访问。
帮助文件里面也没说数组不能用For Each,对吧:)
Dim s() As String = {"A","B"}
For Each str As String in s
    Output.Show(str)
Next


[此贴子已经被作者于2009-5-23 12:58:33编辑过]