以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  遍历的疑问,望精通者释惑  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=32830)

--  作者:zerov
--  发布时间:2013/5/9 6:52:00
--  遍历的疑问,望精通者释惑
1、将所有表的审核列设置为:如果已经审核,则不允许修改

For Each dt As DataTable In DataTables \'遍历所有表
    For Each dc As Datacol In dt.Datacols ‘遍历所有列
      if e.datacols.name = "审核" then ’如果是审核列
         if e.datacols("审核")= true then ‘如果已经审核
              e.datarow("审核").AllowEdit = True  则锁定该行,此行不允许修改
         end if
     end if
  next
next 

    疑问:1、此句对不对?
                2、此句是不是设定在datatablechanging中
              3、这种嵌套遍历是不是会很慢?

如果想把所有表设置为当前行为突出显示呢,又如何做?

--  作者:lsy
--  发布时间:2013/5/9 8:31:00
--  

DataColChanging

 

If e.DataCol.Name = "审核" AndAlso e.DataRow("审核") = True then

   e.Cancel = True

End If

[此贴子已经被作者于2013-5-9 8:55:17编辑过]

--  作者:zerov
--  发布时间:2013/5/9 12:39:00
--  回复:(lsy)DataColChanging?If e.DataCol...
不起作用,你这个只能针对某个表事件吧,在全局表中的pe或锁定行中设置,提示不是其中的成员。

[此贴子已经被作者于2013-5-9 12:47:30编辑过]

--  作者:blackzhu
--  发布时间:2013/5/9 12:41:00
--  
表事件
--  作者:lsy
--  发布时间:2013/5/9 13:56:00
--  
以下是引用zerov在2013-5-9 12:39:00的发言:
不起作用,你这个只能针对某个表事件吧,在全局表中的pe或锁定行中设置,提示不是其中的成员。

[此贴子已经被作者于2013-5-9 12:47:30编辑过]

小伙子,学艺不精啊。


--  作者:jijianjsj
--  发布时间:2013/5/9 15:03:00
--  

  e.datarow("审核").AllowEdit = false  则锁定该行,此行不允许修改

遍历所有表所有列,很慢吧。。。

我遍历所有表是否haschange都觉得慢了。。。。

[此贴子已经被作者于2013-5-9 15:06:24编辑过]

--  作者:jspta
--  发布时间:2013/5/9 15:24:00
--  
以下是引用zerov在2013-5-9 6:52:00的发言:
1、将所有表的审核列设置为:如果已经审核,则不允许修改

For Each dt As DataTable In DataTables \'遍历所有表
    For Each dc As Datacol In dt.Datacols ‘遍历所有列
      if e.datacols.name = "审核" then ’如果是审核列
         if e.datacols("审核")= true then ‘如果已经审核
              e.datarow("审核").AllowEdit = True  则锁定该行,此行不允许修改
         end if
     end if
  next
next 

    疑问:1、此句对不对?
                2、此句是不是设定在datatablechanging中
              3、这种嵌套遍历是不是会很慢?

如果想把所有表设置为当前行为突出显示呢,又如何做?

For Each dt As DataTable In DataTables \'遍历所有表
    If dt.DataCols.Contains("审核") Then
        Dim cmd As new SQLCommand
        cmd.CommandText = "update {" & dt.Name & "} set [_Locked] = true where [审核] = true "

        cmd.ExecuteNonQuery
        dt.Load
    End If
Next

只要设置一个按钮执行就行了,不需要放到表事件里,而且这个只需要执行一次,不需要每次启动执行,锁定行是永久性的


--  作者:nblwar
--  发布时间:2013/5/9 19:04:00
--  

PrepareEdit

If e.Table.Cols.Contains("审核") Then

    If e.Row("审核") = True Then

        e.Cancel = True

    End If

End If




然后在项目事件Initialize加入代码:

For Each dt As DataTable In DataTables
    dt.GlobalHandler.
PrepareEdit True
Next

[此贴子已经被作者于2013-5-9 19:06:24编辑过]

--  作者:zerov
--  发布时间:2013/5/10 10:32:00
--  回复:(nblwar)PrepareEditIf e.Table.Cols.Contain...
谢谢,解决