以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]移除处理完毕的行这种情况如何实现?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=37700)

--  作者:syzsyk
--  发布时间:2013/7/8 23:11:00
--  [求助]移除处理完毕的行这种情况如何实现?

见管理项目930,在AfterSaveProject要实现移除处理完毕的行按用户如下可以实现,但现在根据日期、姓名、权限授权后,如何修改以下代码实现移除处理完毕的行?

Dim Filter As String
Dim bj As String
Dim drs As List(Of DataRow)
\'移除处理完毕的行
Select Case User.Name
    Case "张三"
        Filter = "进度 = \'1B\'"
    Case "李四"
        Filter = "进度 = \'2B\'"
    Case "王五"
        Filter = "进度 = \'3B\'"
    Case "赵六"
        Filter = "进度 = \'4B\'"
    Case Else
        Return \'其他用户正常返回
End Select
DataTables("表A").RemoveFor(Filter)
\'追载待处理的行
Select Case User.Name
    Case "李四"
        Filter = "进度 = \'1B\'"
        bj= "2A"
    Case "王五"
        Filter = "进度 = \'2B\'"
        bj = "3A"
    Case "赵六"
        Filter = "进度 = \'3B\'"
        bj = "4A"
    Case Else
        Return \'其他用户正常返回
End Select
drs = DataTables("表A").AppendLoad(Filter,False)
\'为新追载的行设置流程开始标记
If drs.Count > 0 Then
    For Each dr As DataRow In drs
        dr("进度") = bj
        dr.Save() \'一定要保存,以更新后台的流程开始标记
    Next
End If

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目930.foxdb


--  作者:lsy
--  发布时间:2013/7/9 7:51:00
--  
开发版,与在下无关。
--  作者:syzsyk
--  发布时间:2013/7/9 22:58:00
--  

Select Case 语句不太会用,用if语句,修改如下,运行显示错误见下图,请大家帮忙看问题出在哪?:

Dim dt As Date = Date.Today
Dim us As String = User.name
Dim dr As DataRow = DataTables("用户授权").Find("用户名 = \'" & us & "\' And 日期 = #" & dt & "#")
Dim Filter As String
Dim bj As String
Dim drs As List(Of DataRow)
\'移除处理完毕的行
If dr IsNot Nothing Then
   If dr("A权限")=True Then
        Filter = "进度 = \'1B\'"
End If
   If dr("B权限")=True Then
        Filter = "进度 = \'2B\'"
End If
   If dr("C权限")=True Then
        Filter = "进度 = \'3B\'"
End If
   If dr("D权限")=True Then
        Filter = "进度 = \'4B\'"
End If
   Else
        Return \'其他用户正常返回
End If
DataTables("表A").RemoveFor(Filter)
\'追载待处理的行
If dr IsNot Nothing Then
   If dr("B权限")=True Then
        Filter = "进度 = \'1B\'"
        bj= "2A"
End If
   If dr("C权限")=True Then
        Filter = "进度 = \'2B\'"
        bj = "3A"
End If
    If dr("D权限")=True Then
        Filter = "进度 = \'3B\'"
        bj = "4A"
End If
   Else
        Return \'其他用户正常返回
End If
drs = DataTables("表A").AppendLoad(Filter,False)
\'为新追载的行设置流程开始标记
If drs.Count > 0 Then
    For Each dr As DataRow In drs
        dr("进度") = bj
        dr.Save() \'一定要保存,以更新后台的流程开始标记
    Next
End If

 


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

--  作者:Bin
--  发布时间:2013/7/10 8:47:00
--  
Dim dr As DataRow = DataTables("用户授权").Find("用户名 = \'" & us & "\' And 日期 = #" & dt & "#") \'你这里定义了DR

If drs.Count > 0 Then 

    For Each dr As DataRow In drs \'你下面这里又重新定义一个DR 你应该换一个变量名
        dr("进度") = bj
        dr.Save() \'一定要保存,以更新后台的流程开始标记
    Next
End If
--  作者:syzsyk
--  发布时间:2013/7/10 10:42:00
--  

Bin版主,您的说法是对的,现在不报错了,但就是没有起到作用,下面的代码中哪还有问题?

Dim dt As Date = Date.Today
Dim us As String = User.name
Dim tr As DataRow = DataTables("用户授权").Find("用户名 = \'" & us & "\' And 日期 = #" & dt & "#")
Dim Filter As String
Dim bj As String
Dim drs As List(Of DataRow)
\'移除处理完毕的行
If tr IsNot Nothing Then
   If tr("A权限")=True Then
        Filter = "进度 = \'1B\'"
End If
   If tr("B权限")=True Then
        Filter = "进度 = \'2B\'"
End If
   If tr("C权限")=True Then
        Filter = "进度 = \'3B\'"
End If
   If tr("D权限")=True Then
        Filter = "进度 = \'4B\'"
End If
   Else
        Return \'其他用户正常返回
End If
DataTables("表A").RemoveFor(Filter)
\'追载待处理的行
If tr IsNot Nothing Then
   If tr("B权限")=True Then
        Filter = "进度 = \'1B\'"
        bj= "2A"
End If
   If tr("C权限")=True Then
        Filter = "进度 = \'2B\'"
        bj = "3A"
End If
    If tr("D权限")=True Then
        Filter = "进度 = \'3B\'"
        bj = "4A"
End If
   Else
        Return \'其他用户正常返回
End If
drs = DataTables("表A").AppendLoad(Filter,False)
\'为新追载的行设置流程开始标记
If drs.Count > 0 Then
    For Each dr As DataRow In drs
        dr("进度") = bj
        dr.Save() \'一定要保存,以更新后台的流程开始标记
    Next
End If


--  作者:Bin
--  发布时间:2013/7/10 10:53:00
--  
日期不一致没有获取到任何行吧
--  作者:syzsyk
--  发布时间:2013/7/10 11:39:00
--  

测试了下,移除处理完的行及追载待处理的行都不起作用。


 


--  作者:Bin
--  发布时间:2013/7/10 11:49:00
--  
你先确保你TR有正常获取到没
--  作者:syzsyk
--  发布时间:2013/7/10 19:11:00
--  

MessageBox.Show(Filter)后:

 


图片点击可在新窗口打开查看此主题相关图片如下:图2.jpg
图片点击可在新窗口打开查看

 

行消失了,但点击确定后,行又出现了,进度列没有
内容了,怎么回事?

[此贴子已经被作者于2013-7-10 19:20:26编辑过]

--  作者:syzsyk
--  发布时间:2013/7/10 23:57:00
--  

问题自己已经解决,原因是缺少了下面红色部分代码:

Dim dt As Date = Date.Today
Dim us As String = User.name
Dim tr As DataRow = DataTables("用户授权").Find("用户名 = \'" & us & "\' And 日期 = #" & dt & "#")
Dim Filter As String
Dim bj As String
Dim drs As List(Of DataRow)
\'移除处理完毕的行

If tr IsNot Nothing Then
   If tr("A权限") = True Then
        Filter = "进度 = \'1B\'"
     End If
   If tr("B权限") = True Then
        Filter = "进度 = \'2B\'"
     End If
   If tr("C权限") = True Then
        Filter = "进度 = \'3B\'"
     End If
   If tr("D权限") = True Then
        Filter = "进度 = \'4B\'"
     End If
   Else
        Return \'其他用户正常返回
End If

DataTables("表A").RemoveFor(Filter)
MessageBox.Show(Filter)
\'追载待处理的行
If tr IsNot Nothing Then
   If tr("A权限")=True Then
Filter = "进度 Is Null" \'进度为空
        bj = "1A"
End If
   If tr("B权限")=True Then
        Filter = "进度 = \'1B\'"
        bj= "2A"
End If
   If tr("C权限")=True Then
        Filter = "进度 = \'2B\'"
        bj = "3A"
End If
    If tr("D权限")=True Then
        Filter = "进度 = \'3B\'"
        bj = "4A"
End If
   Else
        Return \'其他用户正常返回
End If
drs = DataTables("表A").AppendLoad(Filter,False)
\'为新追载的行设置流程开始标记
If drs.Count > 0 Then
    For Each dr As DataRow In drs
        dr("进度") = bj
        dr.Save() \'一定要保存,以更新后台的流程开始标记
    Next
End If