以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]关于复制后台数据行  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=120614)

--  作者:沪上游客
--  发布时间:2018/6/20 15:29:00
--  [求助]关于复制后台数据行
老师您好!
我设置了工程合同数据基础表的流程设置,每个用户会根据“流程设置”表中的节点(进度)加载数据到“我的工作台”表,但是我的“工程合同数据基础表”是整个项目的主表,设置了分页加载(每页20条记录),现在以下命令在”我的工作台“表中只会加载第一页的20条记录。
请问在以下命令中怎么样复制附合条件的后台数据行?请指教!
以下是主表DataColChanged代码:
For Each sz As DataRow In DataTables("流程设置").Select("姓名 = \'" & User.Name & "\'")
If e.DataCol.Name = "进度" AndAlso e.DataRow("进度") = sz("进度") Then
    Dim nma() As String = {"进度","合同编号","工程名称","所属部门_区域公司","所属部门_分公司","录入日期","记录编号"} \'工程合同数据基础表数据来源列
    Dim nmb() As String = {"进度","合同编号","工程名称","所属部门_区域公司","所属部门_分公司","申请日期","记录编号"} \'我的工作台表数据接收列
    Dim dr As DataRow = DataTables("我的工作台").AddNew
    For i As Integer = 0 To nma.Length - 1
        dr(nmb(i)) = e.DataRow(nma(i))

“我的工作台”表是内部表,项目每次启动会先清除所有行,然后重新加载。
以下是我的工作台窗口更新按钮代码:
\'显示工程合同登记待办
Dim F1 As String = "(进度 <> \'SLHT2B\')"
If User.Type = UserTypeEnum.Administrator Then
    DataTables("工程合同基础数据").LoadFilter = F1 
Else If User.Type = UserTypeEnum.Developer Then
    DataTables("工程合同基础数据").LoadFilter = F1
Else If User.Group = "总公司" Then
    DataTables("工程合同基础数据").LoadFilter = F1
Else If User.Group Like "*区域" Then
    DataTables("工程合同基础数据").LoadFilter = "所属部门_区域公司 = \'" & User.Group & "\' And" & F1
Else If User.Group Like "*分公司" Then
    DataTables("工程合同基础数据").LoadFilter = "所属部门_分公司 = \'" & User.Group & "\'And" & F1
Else If User.Group = "项目部" Then
    Dim dr As DataRow
    dr = DataTables("操作人员").SQLFind("[姓名] = \'" & User.name & "\'")
    If dr IsNot Nothing
        DataTables("工程合同基础数据").LoadFilter = "项目部全称 = \'" & dr("项目部全称") & "\'"
    End If
End If
DataTables("工程合同基础数据").Load()
DataTables("工程合同基础数据").DataCols("进度").RaiseDataColChanged()

Dim t As Table = Tables("我的工作台")
Dim n As Integer = t.DataTable.GetValues("记录编号", t.filter).count
Dim lbl As WinForm.Label
Dim lb2 As WinForm.Label
lb2 = e.Form.Controls("Label2")
lb2.Text = "您的待办事项有" & n & "条"
If n = 0 Then
    e.Form.Controls("Label1").Visible = True
    lbl = e.Form.Controls("Label1")
    lbl.Text = "没有数据"    
Else
    e.Form.Controls("Label1").Visible = False
End If


--  作者:有点甜
--  发布时间:2018/6/20 16:16:00
--  

重置列代码改成

 

For Each cdr As DataRow In DataTables("工程合同基础数据").sqlselect("")
    For Each sz As DataRow In DataTables("流程设置").Select("姓名 = \'" & User.Name & "\'")
        If cdr("进度") = sz("进度") Then
            Dim nma() As String = {"进度","合同编号","工程名称","所属部门_区域公司","所属部门_分公司","录入日期","记录编号"} \'工程合同数据基础表数据来源列
            Dim nmb() As String = {"进度","合同编号","工程名称","所属部门_区域公司","所属部门_分公司","申请日期","记录编号"} \'我的工作台表数据接收列
            Dim dr As DataRow = DataTables("我的工作台").AddNew
            For i As Integer = 0 To nma.Length - 1
                dr(nmb(i)) = cdr(nma(i))
            Next
        End If
    Next
Next


--  作者:沪上游客
--  发布时间:2018/6/20 21:18:00
--  
老师您好!我按照您代码做了,代码如下:

For Each cdr As DataRow In DataTables("工程合同基础数据").sqlselect("进度 <> \'SLHT2B\'")
    For Each sz As DataRow In DataTables("流程设置").Select("姓名 = \'" & User.Name & "\'")
        If cdr("进度") = sz("进度") And sz("所属表名") = "工程合同基础数据" Then
            Dim nma() As String = {"进度","合同编号","工程名称","所属部门_区域公司","所属部门_分公司","录入日期","记录编号"} \'工程合同数据基础表数据来源列
            Dim nmb() As String = {"进度","合同编号","工程名称","所属部门_区域公司","所属部门_分公司","申请日期","记录编号"} \'我的工作台表数据接收列
            Dim dr As DataRow = DataTables("我的工作台").AddNew
            For i As Integer = 0 To nma.Length - 1
                dr(nmb(i)) = cdr(nma(i))
                dr("所属表名") = "工程合同基础数据"
                dr("窗口名") = "待办编缉收入合同"
                If dr("进度") = "SLHT1A" Then
                    dr("事项") = "收入合同登记录入" & "(合同价款:" & cdr("合同价款") & "元)"
                ElseIf dr("进度") = "SLHT1B" Then
                    dr("事项") = "收入合同待审批" & "(合同价款:" & cdr("合同价款") & "元)"
                End If
            Next
        End If
    Next
Next

但是每条记录重复了20条,这是怎么会事?导致复制很慢,复制完后系统速度很慢。请老师指教,谢谢!

--  作者:有点甜
--  发布时间:2018/6/20 21:22:00
--  
For Each cdr As DataRow In DataTables("工程合同基础数据").sqlselect("进度 <> \'SLHT2B\'")
            Dim nma() As String = {"进度","合同编号","工程名称","所属部门_区域公司","所属部门_分公司","录入日期","记录编号"} \'工程合同数据基础表数据来源列
            Dim nmb() As String = {"进度","合同编号","工程名称","所属部门_区域公司","所属部门_分公司","申请日期","记录编号"} \'我的工作台表数据接收列
            Dim dr As DataRow = DataTables("我的工作台").AddNew
            For i As Integer = 0 To nma.Length - 1
                dr(nmb(i)) = cdr(nma(i))
                dr("所属表名") = "工程合同基础数据"
                dr("窗口名") = "待办编缉收入合同"
                If dr("进度") = "SLHT1A" Then
                    dr("事项") = "收入合同登记录入" & "(合同价款:" & cdr("合同价款") & "元)"
                ElseIf dr("进度") = "SLHT1B" Then
                    dr("事项") = "收入合同待审批" & "(合同价款:" & cdr("合同价款") & "元)"
                End If
            Next
Next

--  作者:沪上游客
--  发布时间:2018/6/20 21:26:00
--  
Dim nma() As String = {"进度","合同编号","工程名称","所属部门_区域公司","所属部门_分公司","录入日期","记录编号"} \'工程合同数据基础表数据来源列
            Dim nmb() As String = {"进度","合同编号","工程名称","所属部门_区域公司","所属部门_分公司","申请日期","记录编号"} \'我的工作台表数据接收列
            Dim dr As DataRow = DataTables("我的工作台").AddNew
            For i As Integer = 0 To nma.Length - 1
                dr(nmb(i)) = cdr(nma(i))

老师这个复制行的命令如果设置在窗口的AfterLoad 或者 按钮中,怎么指定来源表列?

--  作者:有点甜
--  发布时间:2018/6/20 22:12:00
--  
不理解你的意思。你现在不是指定了?如果要修改,直接修改代码。
--  作者:沪上游客
--  发布时间:2018/6/20 22:53:00
--  
我的意思 是如果在窗口中设置命令,指定来源表列复制到另一个表应该怎么做?
--  作者:有点甜
--  发布时间:2018/6/20 23:11:00
--  
直接用4楼代码,不可以?