Foxtable(狐表)用户栏目专家坐堂 → 排序问题


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

主题:排序问题

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


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

这代码中的排序是过渡性取数,对阵表的桌号有重新排序意图,问题是如何重新排序,再存回比赛积分表?我是通过保存按钮实现的,
    Case "保存"
        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
        For Each nr As Row In Tables("综合组").Rows
            Dim dr As DataRow = DataTables("比赛积分").SQLfind("[棋赛名称] = '" & di1 & "'And [第几轮比赛] = '" & di2 & "'And [分组] = '综合组' And [编号] = '" & nr("红方_编号") & "'")
            If dr IsNot Nothing Then
                dr("桌号") = nr("桌号")
                dr("积分") = nr("当前局成绩_红方")
                dr.Save
            End If
            dr = DataTables("比赛积分").SQLfind("[棋赛名称] = '" & di1 & "'And [第几轮比赛] = '" & di2 & "'And [分组] = '综合组' and [编号]='" & nr("黑方_编号") & "'")
            If dr IsNot Nothing Then
                dr("桌号") = nr("桌号")
                dr("积分") = nr("当前局成绩_黑方")
                dr.Save
            End If
        Next
        DataTables("比赛积分").load
End Select
但未重新排序,而是直接=排序数,这有违我设置初衷,刚想了一下,把上一轮(a)的数据通过临时表过渡,即:
 Dim drs4 As List(of DataRow) = DataTables("比赛积分").SQLSelect("[棋赛名称] = '" & di1 & "' And [第几轮比赛] = '" & a & "' And [分组] = '" & Str & "'","","日期 Desc,分组,上轮止累计积分 Desc,曾交战对手累计积分")
            For ic As Integer = 0 To drs4.Count - 1
                dr = DataTables("比赛积分").AddNew
                Dim dts2 As DataRow = DataTables("基本信息").SQLFind("[棋赛名称] = '" & di1 & "'And [身份] = '参赛人' And [缺赛轮号] like '%" & di2 & "%' and [编号] = '" & drs4(ic)("编号") & "'")
                If dts2 IsNot Nothing  Then
                    dr("排序") = 0
                Else
                    dr("排序") = ((ii2) + 1) \ 2
                    ii2 + = 1
                End If
                dr("棋赛名称") = di1
                dr("第几轮比赛") = di2
                dr("日期") = di3
                dr("编号") = drs4(ic)("编号")
                dr("姓名") = drs4(ic)("姓名")
                dr("轮赛次数值转换") = Val(di2)
                dr("分组") = Str
                dr("上轮止累计积分") = drs4(ic)("上轮止累计积分") + drs4(ic)("积分")
                dr("曾交战对手累计积分") = drs4(ic)("曾交战对手累计积分") + DataTables("比赛积分").SQLCompute("SUM(积分)","[分组] = '" & Str & "' And [排序] = " & drs4(ic)("排序") & "And [编号] <> '" & drs4(ic)("编号") & "'and [姓名] <> '" & drs4(ic)("姓名") & "'")
                i2 + = 1
            Next
  改用临时表计算,然后对其重新排序,再赋值到比赛积分表本轮新添行(dr)中,这绕一圈就可把全部问题解决了,问题是我不知如何对临时表赋值,重新排序,再赋回dr中,简单问题,复杂的处理,头痛中!
[此贴子已经被作者于2020/6/28 9:21:39编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

新增的时候不要给"排序"列赋值去掉下面红色代码,在生成对阵表的时候,再给这个"排序"列赋值
                If dts2 IsNot Nothing  Then
                    dr("排序") = 0
                Else
                    dr("排序") = ((ii2) + 1) \ 2
                    ii2 + = 1
                End If

-------
            DataTables("比赛积分").Load
            DataTables("比赛积分").Save()
            DataTables("综合组").DataRows.Clear
            Dim drs5 As List(of DataRow) = DataTables("比赛积分").SQLSelect("[棋赛名称] = '" & di1 & "'And [第几轮比赛] = '" & di2 & "' And [分组] = '" & Str & "' And [排序] <> 0","","日期 Desc,分组,上轮止累计积分 Desc,曾交战对手累计积分")
Dim kkk As Integer = 1
            For id As Integer = 0 To drs5.count - 1 Step 2
                Dim c As Integer = rand.Next(0,2)
                Dim c1 As Integer = IIF(c = 0,1,0)
                c = id+c
                c1 = id+c1
                Dim nr As DataRow = DataTables("综合组").AddNew
                nr("桌号") = kkk 
drs5(c)("排序") = kkk 
                If c <= drs5.Count - 1
                    nr("红方_编号") = drs5(c)("编号")
                    nr("红方_姓名") = drs5(c)("姓名")
                    nr("红方_上轮止累计积分") = drs5(c)("上轮止累计积分")
                    nr("红方_曾交战对手累计积分") = drs5(c)("曾交战对手累计积分")
                End If
                If c1 <= drs5.Count - 1
                    nr("黑方_编号") = drs5(c1)("编号")
                    nr("黑方_姓名") = drs5(c1)("姓名")
                    nr("黑方_上轮止累计积分") = drs5(c1)("上轮止累计积分")
                    nr("黑方_曾交战对手累计积分") = drs5(c1)("曾交战对手累计积分")
                End If
            Next
            DataTables("比赛积分").SQLUpdate(drs5)

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


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

不赋值不行啊,因为
dr("曾交战对手累计积分") = drs4(ic)("曾交战对手累计积分") + DataTables("比赛积分").SQLCompute("SUM(积分)","[分组] = '" & Str & "' And [排序] = " & drs4(ic)("排序") & "And [编号] <> '" & drs4(ic)("编号") & "'and [姓名] <> '" & drs4(ic)("姓名") & "'")
要根据排序位置取值,否则无法生成,之后的一切都是无根之源。


 回到顶部
帅哥,在线噢!
有点蓝
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

那就保留这个代码,生成对阵表的时候,再重新"排序"

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


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

            Dim drs5 As List(of DataRow) = DataTables("比赛积分").SQLSelect("[棋赛名称] = '" & di1 & "'And [第几轮比赛] = '" & di2 & "' And [分组] = '" & Str & "' And [排序] <> 0","","日期 Desc,分组,排序,上轮止累计积分 Desc,曾交战对手累计积分")
     Dim zh As Integer = 1
            For id As Integer = 0 To drs5.count - 1 Step 2
                Dim c As Integer = rand.Next(0,2)
                Dim c1 As Integer = IIF(c = 0,1,0)
                c = id+c
                c1 = id+c1
                Dim nr As DataRow = DataTables("综合组").AddNew
                nr("桌号") = zh
                  zh + = 1
                If c <= drs5.Count - 1
                    nr("红方_编号") = drs5(c)("编号")
                    nr("红方_姓名") = drs5(c)("姓名")
                    nr("红方_上轮止累计积分") = drs5(c)("上轮止累计积分")
                    nr("红方_曾交战对手累计积分") = drs5(c)("曾交战对手累计积分")
                End If
                If c1 <= drs5.Count - 1
                    nr("黑方_编号") = drs5(c1)("编号")
                    nr("黑方_姓名") = drs5(c1)("姓名")
                    nr("黑方_上轮止累计积分") = drs5(c1)("上轮止累计积分")
                    nr("黑方_曾交战对手累计积分") = drs5(c1)("曾交战对手累计积分")
                End If
            Next
            DataTables("比赛积分").SQLUpdate(drs5)
            drs5 = DataTables("比赛积分").SQLSelect("[棋赛名称] = '" & di1 & "'And [第几轮比赛] = '" & di2 & "' And [分组] = '" & Str & "' And [排序] = 0","","日期 Desc,分组,排序,上轮止累计积分 Desc,曾交战对手累计积分")
            For id As Integer = 0 To drs5.count - 1 Step 2
                Dim c As Integer = rand.Next(0,2)
                Dim c1 As Integer = IIF(c = 0,1,0)
                c = id+c
                c1 = id+c1
                Dim nr As DataRow = DataTables("综合组").AddNew
                nr("桌号") = 0
                If c <= drs5.Count - 1
                    nr("红方_编号") = drs5(c)("编号")
                    nr("红方_姓名") = drs5(c)("姓名")
                    nr("红方_上轮止累计积分") = drs5(c)("上轮止累计积分")
                    nr("红方_曾交战对手累计积分") = drs5(c)("曾交战对手累计积分")
                End If
                If c1 <= drs5.Count - 1
                    nr("黑方_编号") = drs5(c1)("编号")
                    nr("黑方_姓名") = drs5(c1)("姓名")
                    nr("黑方_上轮止累计积分") = drs5(c1)("上轮止累计积分")
                    nr("黑方_曾交战对手累计积分") = drs5(c1)("曾交战对手累计积分")
                End If
            Next
            DataTables("比赛积分").SQLUpdate(drs5)
        End If
        Tables("比赛积分").Sort = "日期 DESC,棋赛名称,分组,轮赛次数值转换 DESC"
红字标注这样吗?
[此贴子已经被作者于2020/6/28 10:30:49编辑过]

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


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


图片点击可在新窗口打开查看此主题相关图片如下:22.png
图片点击可在新窗口打开查看
桌号没问题了,但对应的上轮止累计积分、曾交战对手累计积分未安要求重排。

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


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

改为这样没问题了:
Dim drs5 As List(of DataRow) = DataTables("比赛积分").SQLSelect("[棋赛名称] = '" & di1 & "'And [第几轮比赛] = '" & di2 & "' And [分组] = '" & Str & "' And [排序] <> 0","","日期 Desc,分组,上轮止累计积分 Desc,曾交战对手累计积分")
            Dim zh As Integer = 1
            For id As Integer = 0 To drs5.count - 1 Step 2
                Dim c As Integer = rand.Next(0,2)
                Dim c1 As Integer = IIF(c = 0,1,0)
                c = id+c
                c1 = id+c1
                Dim nr As DataRow = DataTables("综合组").AddNew
                nr("桌号") = zh
                zh + = 1
                If c <= drs5.Count - 1
                    nr("红方_编号") = drs5(c)("编号")
                    nr("红方_姓名") = drs5(c)("姓名")
                    nr("红方_上轮止累计积分") = drs5(c)("上轮止累计积分")
                    nr("红方_曾交战对手累计积分") = drs5(c)("曾交战对手累计积分")
                End If
                If c1 <= drs5.Count - 1
                    nr("黑方_编号") = drs5(c1)("编号")
                    nr("黑方_姓名") = drs5(c1)("姓名")
                    nr("黑方_上轮止累计积分") = drs5(c1)("上轮止累计积分")
                    nr("黑方_曾交战对手累计积分") = drs5(c1)("曾交战对手累计积分")
                End If
            Next
            DataTables("比赛积分").SQLUpdate(drs5)
            drs5 = DataTables("比赛积分").SQLSelect("[棋赛名称] = '" & di1 & "'And [第几轮比赛] = '" & di2 & "' And [分组] = '" & Str & "' And [排序] = 0","","日期 Desc,分组,上轮止累计积分 Desc,曾交战对手累计积分")
            For id As Integer = 0 To drs5.count - 1 Step 2
                Dim c As Integer = rand.Next(0,2)
                Dim c1 As Integer = IIF(c = 0,1,0)
                c = id+c
                c1 = id+c1
                Dim nr As DataRow = DataTables("综合组").AddNew
                nr("桌号") = 0
                If c <= drs5.Count - 1
                    nr("红方_编号") = drs5(c)("编号")
                    nr("红方_姓名") = drs5(c)("姓名")
                    nr("红方_上轮止累计积分") = drs5(c)("上轮止累计积分")
                    nr("红方_曾交战对手累计积分") = drs5(c)("曾交战对手累计积分")
                End If
                If c1 <= drs5.Count - 1
                    nr("黑方_编号") = drs5(c1)("编号")
                    nr("黑方_姓名") = drs5(c1)("姓名")
                    nr("黑方_上轮止累计积分") = drs5(c1)("上轮止累计积分")
                    nr("黑方_曾交战对手累计积分") = drs5(c1)("曾交战对手累计积分")
                End If
            Next
            DataTables("比赛积分").SQLUpdate(drs5)
        End If
        Tables("比赛积分").Sort = "日期 DESC,棋赛名称,分组,轮赛次数值转换 DESC"

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


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

For i As Integer = Tables("比赛积分").TopPosition To Tables("比赛积分").BottomPosition
    Tables("比赛积分").Rows(i).load()
Next
删除行后自动重新加载的代码写在哪?写在删除行后执行,报错!
你说

全部删除完再加载.

删除的代码
dataTables("比赛积分").load()
我之前在表事件的删除行中是这样写的,报错。

 回到顶部
帅哥,在线噢!
有点蓝
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

使用按钮删除行,在按钮里加载,不要在表事件里加载

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


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

已经删除行了,现在的问题是同步刷新加载数据,能不能不用按钮实现?

 回到顶部
总数 22 上一页 1 2 3 下一页