Foxtable(狐表)用户栏目专家坐堂 → 请教循环语句的执行顺序,老大请进


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

主题:请教循环语句的执行顺序,老大请进

帅哥哟,离线,有人找我吗?
唐尸三摆手
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2011/12/17 11:22:00 [只看该作者]

DataTables("表A").DataRows.clear
For i As Integer = 0 To 4
    If i = 0  Then
        Dim nr As DataRow = DataTables("表A").AddNew
        nr("第一列") = i
    Else
        Dim drs As List(of DataRow) =  DataTables("表A").Select("第一列 = "& i-1 &"")
        For j As Integer = 0 To drs.count - 1
            Dim nr As DataRow = DataTables("表A").AddNew
            nr("第一列") = i
            nr("第二列") = j
        Next
    End If
Next

我就是想在else后循环获取新增加的i-1值的记录数,呵呵,我怎么越说自己越说不明白了

 


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/17 11:35:00 [只看该作者]

这种问题别人帮补你的,因为只有你自己知道你需要什么。

按照你给出的6条说明,只能写出这样的代码,清除表A的数据再测试:

 

Dim drs As List(of DataRow) = DataTables("表B").Select("","第四列")
For m As Integer = 0 To drs.Count -1
    Dim dr1 As DataRow = drs(m)
    If m = 0 Then
        Dim cnt As Integer  = math.Floor(dr1("第三列") / dr1("第二列"))
        For n  As Integer  = 1 To cnt
            Dim dr2 As DataRow  = DataTables("表A").AddNew()
            dr2("第一列") = m
            '第二列没有赋值,所以等于0
        Next
    Else
        Dim drs2 As List(of DataRow) = DataTables("表A").Select("第一列 = "& (m-1))
        For Each dr2 As DataRow In drs2
            Dim cnt As Integer  = math.Floor(dr2("第二列") / dr1("第二列"))
            messagebox.show("cnt = " & cnt)
            messagebox.show("由于表A的第二列没有赋值,所以表A第二列除以表B第二列,结果是0,所以不会新增行")
            For n As Integer = 1 To cnt
                Dim dr3 As DataRow  = DataTables("表A").AddNew()
                dr3("第一列") = m
                dr3("第二列") = drs2.Count
            Next
        Next
    End If
Next


 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2011/12/17 12:49:00 [只看该作者]

DataTables("表A").DataRows.clear
Dim drs As List(of DataRow) = DataTables("表B").Select("","第四列")
For m As Integer = 0 To drs.Count -1
    Dim dr1 As DataRow = drs(m)
    If m = 0 Then
        Dim cnt As Integer  = math.Floor(dr1("第三列") / dr1("第二列"))
        For n  As Integer  = 1 To cnt
            Dim dr2 As DataRow  = DataTables("表A").AddNew()
            dr2("第一列") = m
           
dr2("第二列") = dr1("第二列")
            dr2("第三列") = n
            '第二列没有赋值,所以等于0
        Next
    Else
        Dim drs2 As List(of DataRow) = DataTables("表A").Select("第一列 = "& (m-1))
        For Each dr2 As DataRow In drs2
            Dim cnt As Integer  = math.Floor(dr2("第二列") / dr1("第二列"))
            messagebox.show("cnt = " & cnt)
           ' messagebox.show("由于表A的第二列没有赋值,所以表A第二列除以表B第二列,结果是0,所以不会新增行")
            For n As Integer = 1 To cnt
                Dim dr3 As DataRow  = DataTables("表A").AddNew()
                dr3("第一列") = m
                dr3("第二列") = dr1("第二列")
                dr3("第三列") = dr2("第三列") + n
            Next
        Next
    End If
Next

 

按照你的思路,我试了下,和我原来的测试结果是一致的,前三列的结果如下,现在就是想再往下循环增加,一直加到第一列的顺序到5为止

0 50 1
0 50 2
0 50 3
0 50 4
0 50 5
0 50 6
1 20 2
1 20 3
1 20 3
1 20 4
1 20 4
1 20 5
1 20 5
1 20 6
1 20 6
1 20 7
1 20 7
1 20 8


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/18 9:54:00 [只看该作者]

上面为什么只遍历了0和1,之后没有遍历下去。

因为:

1、当m等于2的时候,也就是执行第三次遍历的时候:

Dim dr1 As DataRow = drs(m)

dr1等于表B的第三行,所以: dr1("第二列") 等于 40

 

Dim drs2 As List(of DataRow) = DataTables("表A").Select("第一列 = "& (m-1))
For Each dr2 As DataRow In drs2

    Dim cnt As Integer  = math.Floor(dr2("第二列") / dr1("第二列"))

next

 

dr2为第一列等于1的行中的一个,这些行的第二列全部等于20, 所以:  dr2("第二列") 等于 20


所以

 

Dim cnt As Integer = math.Floor(dr2("第二列") / dr1("第二列"))

 

等效于

 

 Dim cnt As Integer = math.Floor(20 / 40)

 

所以cnt等于0,所以:

 

For n As Integer = 1 To cnt

next

 

其实就是:

 

For n As Integer = 1 To 0

next

 

所以不会有增加行的操作了。

 

 

 


 回到顶部
总数 14 上一页 1 2