Foxtable(狐表)用户栏目专家坐堂 → 想做一个排位表


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

主题:想做一个排位表

美女呀,离线,留言给我吧!
采菊东篱下
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/4/10 10:08:00 [只看该作者]

DataTables("对阵表").DataRows.Clear'清空窗口上table控件绑定的表格数据
Dim bsrq As WinForm.DateTimePicker = e.Form.Controls("rq")'定义窗口上的日期控件
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 Integer = m.Value'定义窗口上的第几轮变量为整数型
Dim di3 As Date = bsrq.Value'定义窗口上的日期变量为日期型
'以上为定义窗口上的控件和变量,要不要这样定义,请指正。
Dim ds As DataRow =  DataTables("对阵表").SQLfind("棋赛名称 = '" & di1 & "' And 第几轮比赛 = '" & di2 & "'")'定义ds为对阵表上的棋赛名称和第几轮比赛等于窗口控件上的棋赛名称和第几轮比赛上的行
Dim dr As DataRow =  DataTables("比赛积分").SQLfind("棋赛名称 = '" & di1 & "'")'定义dr为当比赛积分表上的棋赛名称和第几轮比赛等于窗口控件上的棋赛名称和第几轮比赛上的行
Dim di4 As Integer = ds("桌号") = 0'定义di4为符合上面条件的行对应的桌号变量
'下面是根据基本信息表上的棋赛名称等于窗口控件上的棋赛名称,姓名不为空,身份列为参赛人,安桌号顺序生成以人数个数不安顺序随机生成编号,编号对应基本信息表上对应的姓名、编号,就是他应坐的桌号。
If dr Is Nothing Then
    di1 = qsmc.Value
    di2 = 1
    Dim ls As Integer = DataTables("基本信息").SQLGetValues("棋赛名称|姓名|身份", "棋赛名称 = '" & di1 & "' And 姓名 is not null and 身份 = '参赛人'").Count
    Dim ids1,ids2 As New List(of Integer) '用于存储洗牌前后的位置
    For i As Integer = 0 To ls -1 '准备初始的牌
        ids1.add(i)
    Next
    For i As Integer = 0 To ls - 1 '开始洗牌
        Dim idx As Integer = ids1(rand.Next(0,ids1.count))
        ids2.Add(idx)
        ids1.Remove(idx)
        Dim n = 2
        If ls > = n Then
            Dim ls1 As new List(Of String)
            Do While ls1.count < n
                Dim a = Rand.Next(0, ls)
                If ls1.Contains(a) = False Then
                    ls1.add(ids2(a))
                End If
            Loop
            di4 = di4 + 1
            ds("红方_编号") = ls1(0)
            ds("黑方_编号") = ls1(1)
        End If
    Next
Else

[此贴子已经被作者于2020/4/10 11:07:56编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/4/10 10:27:00 [只看该作者]

测试了上面这段代码,提示错误,什么意思?

图片点击可在新窗口打开查看此主题相关图片如下:4444.png
图片点击可在新窗口打开查看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:象棋排赛.foxdb

密码:888888

[此贴子已经被作者于2020/4/10 10:44:38编辑过]

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


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/10 10:53:00 [只看该作者]

使用了空对象,比如ds没有判断是否有值

Dim ds As DataRow =  DataTables("对阵表").SQLfind("棋赛名称 = '" & di1 & "' And 第几轮比赛 = '" & di2 & "'")定义ds为对阵表上的棋赛名称和第几轮比赛等于窗口控件上的棋赛名称和第几轮比赛上的行
Dim dr As DataRow =  DataTables("比赛积分").SQLfind("棋赛名称 = '" & di1 & "' And 第几轮比赛 = '" & di2 & "'")'定义dr为当比赛积分表上的棋赛名称和第几轮比赛等于窗口控件上的棋赛名称和第几轮比赛上的行
Dim di4 As Integer = ds("桌号") = 0'定义di4为符合上面条件的行对应的桌号变量

如:
Dim ds As DataRow =  DataTables("对阵表").SQLfind("棋赛名称 = '" & di1 & "' And 第几轮比赛 = '" & di2 & "'")定义ds为对阵表上的棋赛名称和第几轮比赛等于窗口控件上的棋赛名称和第几轮比赛上的行
if ds isnot nothing then
其它代码
end if

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/4/10 11:21:00 [只看该作者]

对阵表未执行按钮事件前就是空表,通过人数个数无序随机生成后生成编号,表事件根据编号引用姓名,空行不能这样定义那应怎写?

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


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/10 11:52:00 [只看该作者]

如:
Dim ds As DataRow =  DataTables("对阵表").SQLfind("棋赛名称 = '" & di1 & "' And 第几轮比赛 = '" & di2 & "'")定义ds为对阵表上的棋赛名称和第几轮比赛等于窗口控件上的棋赛名称和第几轮比赛上的行
if ds is nothing then
ds =  DataTables("对阵表").addnew
end if
其它代码

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/4/10 13:35:00 [只看该作者]

'当比赛积分表中没有对阵表表头上的棋赛名称记录时,安对阵表格式要求对基本信息表中对应的棋赛名称,随机生成不安编号顺序的坐号.
DataTables("对阵表").DataRows.Clear
Dim bsrq As WinForm.DateTimePicker = e.Form.Controls("rq")
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 Integer = m.Value = 1
Dim di3 As Date = bsrq.Value
Dim ds As DataRow =  DataTables("对阵表").SQLfind("棋赛名称 = '" & di1 & "' And 第几轮比赛 = '" & di2 & "'")
If ds Is Nothing Then
    ds =  DataTables("对阵表").addnew
    Dim di4 As Integer = ds("桌号") = 0
    Dim dr As DataRow =  DataTables("比赛积分").SQLfind("棋赛名称 = '" & di1 & "'")
    If dr Is Nothing Then
        Dim ls As Integer = DataTables("基本信息").SQLGetValues("棋赛名称|姓名|身份", "棋赛名称 = '" & di1 & "' And 姓名 is not null and 身份 = '参赛人'").Count
        Dim ids1,ids2 As New List(of Integer) '用于存储洗牌前后的位置
        For i As Integer = 0 To ls -1 '准备初始的牌
            ids1.add(i)
        Next
        For i As Integer = 0 To ls - 1 '开始洗牌
            Dim idx As Integer = ids1(rand.Next(0,ids1.count))
            ids2.Add(idx)
            ids1.Remove(idx)
            Dim n = 2
            If ls > = n Then
                Dim ls1 As new List(Of String)
                Do While ls1.count < n
                    Dim a = Rand.Next(0, ls)
                    If ls1.Contains(a) = False Then
                        ls1.add(ids2(a))
                    End If
                Loop
                di4 = di4 + 1
                ds("红方_编号") = ls1(0)
                ds("黑方_编号") = ls1(1)
            End If
        Next
    End If
End If
DataTables("对阵表").Save()

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


 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/4/10 13:42:00 [只看该作者]

我把  Dim ls1 As new List(Of String)改为:  Dim ls1 As new List(Of Integer)还是报错。

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/4/10 14:10:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:象棋排赛.foxdb

密码:888888
我把结构类型修改为与代码定义类型相符,执行结果对阵表只显示一行编号,没有继续执行,看来是Fox和Next代码有问题,另对阵表表事件代码也应有问题,无法实现自动引用。
[此贴子已经被作者于2020/4/10 14:12:15编辑过]

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


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/10 14:35:00 [只看该作者]

试试

DataTables("对阵表").DataRows.Clear
Dim bsrq As WinForm.DateTimePicker = e.Form.Controls("rq")
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 Integer = m.Value = 1
Dim di3 As Date = bsrq.Value
Dim ds As DataRow =  DataTables("对阵表").SQLfind("棋赛名称 = '" & di1 & "' And 第几轮比赛 = '" & di2 & "'")
If ds Is Nothing Then
    ds =  DataTables("对阵表").addnew
    ds("桌号") = 0
End If
Dim di4 As Integer = ds("桌号")
Dim dr As DataRow =  DataTables("比赛积分").SQLfind("棋赛名称 = '" & di1 & "'")
If dr Is Nothing Then
    Dim ls As Integer = DataTables("基本信息").SQLGetValues("棋赛名称|姓名|身份", "棋赛名称 = '" & di1 & "' And 姓名 is not null and 身份 = '参赛人'").Count
    Dim ids1,ids2 As New List(of Integer) '用于存储洗牌前后的位置
    For i As Integer = 0 To ls -1 '准备初始的牌
        ids1.add(i)
    Next
    For i As Integer = 0 To ls - 1 '开始洗牌
        Dim idx As Integer = ids1(rand.Next(0,ids1.count))
        ids2.Add(idx)
        ids1.Remove(idx)
        Dim n = 2
        If ls > = n Then
            Dim ls1 As new List(Of String)
            Do While ls1.count < n
                Dim a = Rand.Next(0, ls)
                If ls1.Contains(a) = False Then
                    ls1.add(ids2(a))
                End If
            Loop
            di4 = di4 + 1
if ls1.count > 0 then ds("红方_编号") = ls1(0)
if ls1.count > 1 then ds("黑方_编号") = ls1(1)
        End If
    Next
End If

DataTables("对阵表").Save()
[此贴子已经被作者于2020/4/10 14:36:36编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2020/4/10 15:13:00 [只看该作者]


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

我感觉随机生成编号这段代码有问题

 回到顶部
总数 120 上一页 1 2 3 4 5 6 7 8 9 10 下一页 ..12