Foxtable(狐表)用户栏目专家坐堂 → 代码优化


  共有3440人关注过本帖树形打印复制链接

主题:代码优化

帅哥哟,离线,有人找我吗?
有点甜
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/18 14:35:00 [显示全部帖子]

 datacolchanged事件影响的。

 

SystemReady = False
For Each r As Row In Tables("成绩管理").Rows
    Dim dr As DataRow = DataTables("成绩导入").Find("注册学号 = '" & r("注册学号") & "' And 姓名 = '" & r("姓名") & "'")
    If dr IsNot Nothing Then
        For Each s As String In "成绩".Split("|")
            r(s) = dr(s)
        Next
    End If
Next
SystemReady = True

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/18 20:07:00 [显示全部帖子]

 如下

 

For Each dr As DataRow In DataTables("成绩管理").DataRows
    Dim drs1, drs2 As List(of DataRow)
    drs1 = DataTables("成绩管理").Select("注册学号 = '" & dr("注册学号") & "' And Substring([注册年级],1,4) = '" & Date.Today.Year - 3 & "'")
    drs2 = DataTables("成绩管理").Select("注册学号 = '" & dr("注册学号") & "' And 最终成绩 = '及格' And Substring([注册年级],1,4) = '" & Date.Today.Year - 3 & "'")
    If drs1.Count > 0 Then
        If drs1.Count > drs2.Count
            For i As Integer = 0 To drs1.Count - 1
                If drs1(i)("最终成绩") = "不及格" Then
                    drs1(i)("毕业成绩") = "成绩不合格"
                    Exit For
                End If
            Next
        Else
            drs1(0)("毕业成绩") = "成绩合格"
        End If
    End If
Next


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/18 21:20:00 [显示全部帖子]

哦,这样会快一些。进度条,你看这里 http://www.foxtable.com/help/topics/0793.htm

 

 

For Each xh As String In DataTables("成绩管理").GetValues("注册学号")
    Dim drs1, drs2 As List(of DataRow)
    drs1 = DataTables("成绩管理").Select("注册学号 = '" & xh & "' And Substring([注册年级],1,4) = '" & Date.Today.Year - 3 & "'")
    drs2 = DataTables("成绩管理").Select("注册学号 = '" & xh & "' And 最终成绩 = '及格' And Substring([注册年级],1,4) = '" & Date.Today.Year - 3 & "'")
    If drs1.Count > 0 Then
        If drs1.Count > drs2.Count
            For i As Integer = 0 To drs1.Count - 1
                If drs1(i)("最终成绩") = "不及格" Then
                    drs1(i)("毕业成绩") = "成绩不合格"
                    Exit For
                End If
            Next
        Else
            drs1(0)("毕业成绩") = "成绩合格"
        End If
    End If
Next


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/18 22:45:00 [显示全部帖子]

 帮你优化了一下,变成这样。

 

Dim drs As List(Of DataRow) = DataTables("成绩管理").Select("注册年级 = '" & Date.Today.Year - 3 & "'", "注册学号,最终成绩")
Dim pdr As DataRow = drs(0)
Dim result As String = "及格"
For i As Integer = 1 To drs.count - 1
    If pdr("注册学号") <> drs(i)("注册学号") Then
        pdr("毕业成绩") = result
        result = "及格"
        pdr = drs(i)
    End If
    If drs(i)("最终成绩") = "不及格" Then
        result = "成绩不及格"
    End If
Next

If  pdr("注册学号") = drs(drs.Count-1)("注册学号") Then
    pdr("毕业成绩") = result
End If


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/19 10:10:00 [显示全部帖子]

 这样改

 

Dim drs As List(Of DataRow) = DataTables("成绩管理").Select("注册年级 = '" & Date.Today.Year - 3 & "'", "注册学号,最终成绩")
Dim pdr As DataRow = drs(0)
Dim result As String = "及格"
If pdr("最终成绩") = "不及格" Then
    result = "成绩不及格"
Else
    result = "及格"
End If

For i As Integer = 1 To drs.count - 1
    If pdr("注册学号") <> drs(i)("注册学号") Then
        pdr("毕业成绩") = result
        result = "及格"
        pdr = drs(i)
    End If
    If drs(i)("最终成绩") = "不及格" Then
        result = "成绩不及格"
    End If
Next

If  pdr("注册学号") = drs(drs.Count-1)("注册学号") Then
    pdr("毕业成绩") = result
End If


 回到顶部