传统编辑方式

本节内容可以参考CaseStudy目录下的文件:传统编辑方式.Table

在默认情况下,Foxtable允许用户修改表中任何一行数据,也可以随意增加行,在全部修改完毕后,单击保存按钮统一保存。
在工作流环境下,这种处理方式可能不符合要求,例如有的工作流会要求逐行处理数据,处理完毕后要及时保存并流转到下一流程。

所以在讲述流程之前,我们有必要学习一下如何实现传统编辑方式。

本节要做一个下图所示的录入界面:

要求:

1、禁止直接在表中编辑数据,改用录入窗口形式编辑。
2、双击表中的任何一行,即可打开录入窗口编辑此行。
3、每次只能修改一条记录(也就是一行)。
4、在保存或者撤销此记录的修改之前,不能移到其他行,也不能关闭窗口。
5、单击"保存修改"按钮保存此次修改,单击"撤销修改"按钮,撤销此次修改,所有列返回修改前的值。

设计步骤:

1、设计好上图所示的窗口,窗口类型为模式窗口,这样在用户关闭此窗口之前不能进行任何操作。

2、将窗口的BeforeClose事件代码设置为:

If Tables("员工").Current.DataRow.RowState <> DataRowState.Unchanged Then '如果当前行已经修改过
    e.Cancel =
True
End
If

上面的代码在关闭窗口前执行,如果用户已经修改当前记录(行),但未保存,将禁止关闭窗口,直到保存或撤销修改。

提示:行状态在修改前是Unchanged,修改后是Modified,保存修改或撤销修改后,又回到Unchanged。

3、窗口中各按钮的代码:

按钮 代码
上一条

With Tables("员工")
     If .Current IsNot Nothing AndAlso .Current.DataRow.RowState = DataRowState.Unchanged Then '如果当前行未曾修改
        .Position = .Position - 1
    End If

End
With

下一条

With Tables("员工")
     If .Current IsNot Nothing AndAlso .Current.DataRow.RowState = DataRowState.Unchanged Then '如果当前行未曾修改
        .Position = .Position + 1
    End If

End
With

第一条

With Tables("员工")
     If .Current IsNot Nothing AndAlso .Current.DataRow.RowState = DataRowState.Unchanged Then '如果当前行未曾修改
        .Position = 0
    End If

End
With

最末条 With Tables("员工")
     If .Current IsNot Nothing AndAlso .Current.DataRow.RowState = DataRowState.Unchanged Then '如果当前行未曾修改
        .Position = .Rows.Count - 1
   
End If
End
With
新增

With Tables("员工")
    If .Current Is Nothing OrElse .Current.DataRow.RowState = DataRowState.Unchanged Then '如果当前行未曾修改
        Tables("员工").AddNew()
    End If

End
With

删除

With Tables("员工")
    If .Current IsNot Nothing Then
        .Current.Delete
    End If

End
With

保存修改

With Tables("员工")
    If .Current IsNot Nothing Then
        .Current.Save()
    End If

End
With

撤销修改

With Tables("员工")
    If .Current IsNot Nothing Then
        .Current.Reject()
    End If

End
With

从上面的代码可以看出,如果当前记录(行)已经修改但没有保存,窗口中的上一条、下一条、第一条、最末条、新增按钮将拒绝执行,直到保存或撤销修改。

4、将员工表的PrepareEdit事件代码设置为:

e.Cancel = True

这样就禁止了直接从表中修改数据。

5、将员工表的DoubleClick事件代码设置为:

Forms("编辑窗口").Open()

这样双击某行,将自动打开编辑窗口编辑此行数据。


本页地址:http://www.foxtable.com/webhelp/topics/2263.htm