汗,递归就不写了麻烦,直接判断。
下面代码只做了两种情况的判断,你扩展一下写。
Dim dt1 As DataTable = DataTables("希望调整后统计结果")
Dim dt2 As DataTable = DataTables("原始数据")
Dim dtb As new DataTableBuilder("测试")
dtb.AddDef("编号", Gettype(String), 32)
dtb.AddDef("数据一", Gettype(String), 32)
dtb.AddDef("数据二", Gettype(String), 32)
dtb.AddDef("数据三", Gettype(String),32)
dtb.Build()
Dim dt3 As DataTable = DataTables("测试")
dt3.AddNew(dt2.DataRows.count)
Dim ary() As String = {"数据一", "数据二", "数据三"}
Dim drs = dt1.Select("科目 <> '总计'")
For Each c As String In ary
Dim idx As Integer = 0
For Each dr As DataRow In drs
For i As Integer = idx To idx+dr(c)-1
dt3.DataRows(i)(c) = dr("科目")
Next
idx += dr(c)
Next
Next
For i As Integer = 0 To 10 '测试少量数据
Dim dr As DataRow = dt2.DataRows(i)
'Dim ls As new List(Of String)
'ls.add(dr("数据一"))
'ls.add(dr("数据二"))
'ls.add(dr("数据三"))
'Dim flag As Boolean = False
'For Each cdr As DataRow In dt3.DataRows
'If cdr.Isnull("编号") Then
'If ls.Contains(cdr("数据一")) AndAlso ls.Contains(cdr("数据二")) AndAlso ls.Contains(cdr("数据三")) AndAlso cdr("数据一") <> cdr("数据二") AndAlso cdr("数据一") <> cdr("数据三") AndAlso cdr("数据三") <> cdr("数据二")Then
'flag = True
'cdr("编号") = dr("编号")
'Exit For
'End If
'End If
'Next
Dim temp As String = ""
For Each cdr As DataRow In dt3.DataRows
If cdr.Isnull("编号") Then
If dr("数据一") = cdr("数据一") OrElse dr("数据一") = cdr("数据二") OrElse dr("数据一") = cdr("数据三") Then
If dr("数据一") = cdr("数据一") Then
For Each ccdr As DataRow In dt3.DataRows
If ccdr.Isnull("编号") Then
If dr("数据二") = ccdr("数据二") OrElse dr("数据二") = ccdr("数据三") Then
If dr("数据二") = ccdr("数据二") Then
For Each cccdr As DataRow In dt3.DataRows
If cccdr.Isnull("编号") Then
If dr("数据三") = cccdr("数据三") Then
cdr("编号") = dr("编号")
temp = cdr("数据三")
cdr("数据三") = cccdr("数据三")
cccdr("数据三") = temp
temp = cdr("数据二")
cdr("数据二") = ccdr("数据二")
ccdr("数据二") = temp
Exit For
End If
End If
Next
ElseIf dr("数据二") = ccdr("数据三") Then
For Each cccdr As DataRow In dt3.DataRows
If cccdr.Isnull("编号") Then
If dr("数据三") = cccdr("数据二") Then
cdr("编号") = dr("编号")
temp = cdr("数据二")
cdr("数据二") = cccdr("数据二")
cccdr("数据二") = temp
temp = cdr("数据三")
cdr("数据三") = ccdr("数据三")
ccdr("数据三") = temp
Exit For
End If
End If
Next
End If
Exit For
End If
End If
Next
End If
Exit For
End If
End If
Next
Next
MainTable = Tables("测试")