以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  多列如何同时产生随机数?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=83819)

--  作者:hyowl
--  发布时间:2016/4/17 21:16:00
--  多列如何同时产生随机数?
老师好,在成绩登记表中,如果要根据班别自动产生语文_1,语文_2,……等60余个随机成绩,班别为A,则随机数范围为(88,98),班别为B,则随机数范围为(78,87),班别为C,则随机数范围为(68,78)。在doatacolchanged中加入如下事件:


If  e.DataRow("班别")="C" Then
    e.DataRow("语文_1")=Rand.Next(68,78)
 Else
    If  e.DataRow("班别")="B" Then
        e.DataRow("语文_1")=Rand.Next(78,87)
     
    Else
        e.DataRow("语文_1")=Rand.Next(88,98)
         End If
End If

以上代码执行是正常的,但是只能设置一门成绩,如果设置两门及两门以上成绩就会闪退(如下),请问这是为何,正确的该如何实现?

If  e.DataRow("班别")="平行" Then
    e.DataRow("语文_1")=Rand.Next(68,78)
    e.DataRow("数学_1")=Rand.Next(68,78)
 Else
    If  e.DataRow("班别")="小班" Then
        e.DataRow("语文_1")=Rand.Next(78,87)
        e.DataRow("数学_1")=Rand.Next(78,87)
    Else
        e.DataRow("语文_1")=Rand.Next(88,98)
        e.DataRow("数学_1")=Rand.Next(88,98)
         End If
End If






图片点击可在新窗口打开查看此主题相关图片如下:截图20160417205919.png
图片点击可在新窗口打开查看



--  作者:大红袍
--  发布时间:2016/4/17 21:53:00
--  

比如,代码可以这样写

 

If e.DataCol.Name = "班别" Then
    Select Case e.DataRow("班别")
        Case "A"
            e.DataRow("语文_1")=Rand.Next(68,78)
            e.DataRow("数学_1")=Rand.Next(68,78)
        Case "B"
            e.DataRow("语文_1")=Rand.Next(68,78)
            e.DataRow("数学_1")=Rand.Next(68,78)
        Case "C"
            e.DataRow("语文_1")=Rand.Next(68,78)
            e.DataRow("数学_1")=Rand.Next(68,78)
        
    End Select
End If


--  作者:cbt
--  发布时间:2016/4/17 21:57:00
--  
 没加 判断  e.datacol.name 的名字
If e.DataCol.Name= "班别" Then
....
End If


--  作者:hyowl
--  发布时间:2016/4/18 9:02:00
--  
谢谢大红袍老师!
--  作者:hyowl
--  发布时间:2016/4/18 9:03:00
--  
嗯,非常正确,加上判断就行了,谢谢!