以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  怎么无法给分组赋值?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=151265)

--  作者:采菊东篱下
--  发布时间:2020/6/19 8:16:00
--  怎么无法给分组赋值?
  我在对阵表窗口男子组按钮里写了代码,可无法给比赛积分表分组列赋值,不知问题在呢?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:象棋排赛.foxdb
密码:888888


--  作者:有点蓝
--  发布时间:2020/6/19 9:09:00
--  
没看到哪里有给分组列赋值的代码
--  作者:采菊东篱下
--  发布时间:2020/6/19 9:34:00
--  
不是这样赋值吗?那应怎么写?
Dim qsmc As WinForm.ComboBox = e.Form.Controls("棋赛名称")
Dim di1 As String = qsmc.Value
Dim m As WinForm.TextBox = e.Form.Controls("第几轮")
Dim di2 As String = m.Value
Dim bsrq As WinForm.DateTimePicker = e.Form.Controls("rq")
Dim di3 As Date = bsrq.Value
Dim Str As String = "男子组"
Dim dr As DataRow = DataTables("比赛积分").SQLfind("[棋赛名称] = \'" & di1 & "\'And [第几轮比赛] = \'" & di2 & "\'And [性别] = \'男\' And [分组] = \'" & Str & "\'")
Dim a As String = Cstr(Val(di2)-1)
Dim i2 As Integer = 1
Dim ii2 As Integer = 1
Dim dts As List(of DataRow) = DataTables("基本信息").SQLSelect("[棋赛名称] = \'" & di1 & "\'And [身份] = \'参赛人\' And [性别] = \'男\'")
DataTables("比赛积分").DeleteFor("[棋赛名称] is null and [第几轮比赛] is null And [分组] = \'男子组\'")
Dim cnt As Integer
cnt = DataTables("比赛积分").Compute("Count([姓名])", "[棋赛名称] = \'" & di1 & "\'And [第几轮比赛] = \'" & di2 & "\'And [性别] = \'男\' And [分组] = \'" & Str & "\'")
If di2 =1 And cnt = 0 Then
    Do While dts.Count > 0
        Dim idx As Integer = rand.Next(0,dts.Count-1)
        dr = DataTables("比赛积分").AddNew
        dr("桌号") = math.Ceiling((i2) / 2)
        dr("日期") = di3
        dr("棋赛名称") = di1
        dr("第几轮比赛") = di2
        dr("分组") = Str
        dr("编号") = dts(idx)("编号")
        dr("姓名") = dts(idx)("姓名")
        dr("轮赛次数值转换") = Val(di2)
        dts.RemoveAt(idx)
        i2 + = 1
    Loop
    DataTables("比赛积分").Load
    DataTables("比赛积分").Save()
    DataTables("男子组").DataRows.Clear
    Dim drs1 As List(of DataRow) = DataTables("比赛积分").SQLSelect("[棋赛名称] = \'" & di1 & "\'And [第几轮比赛] = \'" & di2 & "\'And [性别] = \'男\' And [分组] = \'" & Str & "\'","","桌号 Desc")
    For i As Integer = 0 To drs1.Count - 1 Step 2
        If i + 1 <= drs1.Count - 1
            Dim nr As DataRow = DataTables("男子组").AddNew
            nr("桌号") = drs1(i)("桌号")
            nr("红方_编号") = drs1(i)("编号")
            nr("红方_姓名") = drs1(i)("姓名")
            nr("黑方_编号") = drs1(i+1)("编号")
            nr("黑方_姓名") = drs1(i+1)("姓名")
        End If
    Next

--  作者:采菊东篱下
--  发布时间:2020/6/19 9:35:00
--  
哦,写成这样:
 dr("分组") = "Str"
--  作者:采菊东篱下
--  发布时间:2020/6/19 9:36:00
--  
不对啊,那不是直接就是str
--  作者:有点蓝
--  发布时间:2020/6/19 9:41:00
--  
1楼的项目没看到有这个代码。就是3楼的用法
--  作者:采菊东篱下
--  发布时间:2020/6/19 9:45:00
--  
代码在对阵表窗口男子组按钮里,问题是执行后对阵表分组列并无生成数据。
[此贴子已经被作者于2020/6/19 9:49:48编辑过]

--  作者:有点蓝
--  发布时间:2020/6/19 9:52:00
--  
重新上传项目,1楼的项目男子组按钮和3楼的代码很多不一样
--  作者:采菊东篱下
--  发布时间:2020/6/19 9:55:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:象棋排赛2020619.foxdb


--  作者:有点蓝
--  发布时间:2020/6/19 10:16:00
--  
datacolchanged事件的影响,调换一下赋值的位置,放到棋赛名称、编号,姓名赋值之后,不然这几列会触发datacolchanged事件,从基本信息表取分组覆盖回来。或者取消datacolchanged事件给分组赋值的代码

    Do While dts.Count > 0
        Dim idx As Integer = rand.Next(0,dts.Count-1)
        dr = DataTables("比赛积分").AddNew
        dr("桌号") = math.Ceiling((i2) / 2)
        dr("日期") = di3
        dr("棋赛名称") = di1
        dr("第几轮比赛") = di2
        dr("编号") = dts(idx)("编号")
        dr("姓名") = dts(idx)("姓名")
        dr("轮赛次数值转换") = Val(di2)
        dr("分组") = Str
        dts.RemoveAt(idx)
        i2 + = 1
    Loop