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


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

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

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/17 9:46:00 [显示全部帖子]

二楼的解释很清楚啊:

 

Dim drs As List(of DataRow) = DataTables("表A").Select("第一列 = "& i-1 &"")

 

得到的永远是一行,j每次都是从0循环到0,所以 nr("第二列") = j ,会使得第二列永远等于0

 

没有看明白你第二列要存一个什么值,而且你的drs.Count是永远等于1的。


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/17 10:04:00 [显示全部帖子]

i=0 要增加几行,i=1要增加几行,i =2要增加几行,规则是什么?

你现在的代码,其实不管这个 i 等于多少,都只是增加一行而已。

[此贴子已经被作者于2011-12-17 10:04:05编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/17 11:12:00 [显示全部帖子]

你只说如何增加行,新增行的各列的内容如何确定?

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望: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


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望: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

 

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

 

 

 


 回到顶部