以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]如何设置显示滚动抽签分组?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=186375)

--  作者:hrw68529
--  发布时间:2023/4/25 9:27:00
--  [求助]如何设置显示滚动抽签分组?

图片点击可在新窗口打开查看此主题相关图片如下:截图00.jpg
图片点击可在新窗口打开查看
专家好,想制作一个考官抽签分组系统,有一个基础表,包括序号,主考官,A市,B市……G市等七个市的考官,每个面试室七个人,在基础表中,如果某个市的考官选为主考官,则该市的考官名单中有一个空格,保证每个面试室7人,且七个市的考官只有1人。目标是:在抽签系统中,点击“开始”,在上边的抽取主考官,抽取考官一……。抽取考官六下边的文本框中显示人员滚动,按下“停”按钮后,生成下表的人员抽取名单,需注意的是:如果某市有主考官,要想保证每个面试室7人,且七个市的考官只有1人的情况下,其他市的考官补充到生成表中的考官一到考官六中。关键是如果让人员在分别在主考官,考官一……考官六的文本框中滚动,有一种动态感。代码如何写,请专家指导。谢谢,如下图:

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


--  作者:hrw68529
--  发布时间:2023/4/25 9:30:00
--  
另外,基础表有多少组,在抽签系统中就有多少面试室号
--  作者:有点蓝
--  发布时间:2023/4/25 9:44:00
--  
可以利用窗口计时事件+随机函数,动态给文本框赋值

计时器事件
dim t as table = tables("表A")
e.form.controls("textbox1").text = t.rows(Rand.Next(0,t.rows.count))("考官1")
e.form.controls("textbox2").text = t.rows(Rand.Next(0,t.rows.count))("考官2")
Application.DoEvents()

--  作者:hrw68529
--  发布时间:2023/4/25 10:37:00
--  
有点蓝,如果有空格,不让它滚动显示出来,可以吗,只显示有名字的

[此贴子已经被作者于2023/4/25 10:41:15编辑过]

--  作者:有点蓝
--  发布时间:2023/4/25 10:41:00
--  
dim dt as datatable = datatables("表A")
dim drs as list(of string) = dt.getvalues("考官1","考官1 is not null")
e.form.controls("textbox1").text = drs(Rand.Next(0,drs.count))
drs  = dt.getvalues("考官2","考官2 is not null")
e.form.controls("textbox2").text = drs(Rand.Next(0,drs.count))

--  作者:hrw68529
--  发布时间:2023/4/25 10:43:00
--  
谢谢


--  作者:hrw68529
--  发布时间:2023/4/26 8:24:00
--  请教随机抽取号的问题
有点蓝老师好,抽取面试考官号遇到了问题,问题是:通过下述代码先生成主考官的面试室号,这此主考官分别是从不同市的考官中选出来,选出来后,每个市的列会出现空单元格,当抽取主考官面试室号后,再抽取A市、B市……的考官面试室号,在抽取A市、B市……的考官面试室号时,需排除主考官的面试室号,然后在剩余的A市、B市……的考官中抽取面试室号,保证每个考官只能选一个面试室号。下述代码如何更改,先举例主考官的抽取代码和A市考官抽取代码。谢谢
附件:1.表
图片点击可在新窗口打开查看此主题相关图片如下:截图02.jpg
图片点击可在新窗口打开查看
2.生成主考官代码(这个没有问题)
Dim dt As Table = Tables("窗口1_table1")
Dim cnt As Integer = dt.Rows.Count
Dim ids(cnt -1) As Integer
For i As Integer = 0 To cnt -1
    ids(i) = i
Next
For i As Integer = 0 To cnt \\ 2 \'洗牌次数
    Dim id1 As Integer = rand.Next(0,cnt)
    Dim id2 As Integer = rand.Next(0,cnt)
    Dim vid As Integer = ids(id1)
    ids(id1) = ids(id2)
    ids(id2) = vid
Next
dt.StopRedraw()
For i As Integer = 0 To Tables("窗口1_table1").Rows.count -1
    Tables("窗口1_table1").Rows(i)("主考官_面试室号")=ids(i)+1
Next
dt.ResumeRedraw()
3.生成A市考官代码
Dim dt1 As Table = Tables("窗口1_table1")
Dim cnt1 As Integer = dt1.Rows.Count
Dim ids1(cnt1 -1) As Integer
For ii As Integer = 0 To cnt1 -1
    ids1(ii) = ii
Next
For ii As Integer = 0 To cnt1 \\ 2 \'洗牌次数
    Dim id3 As Integer = rand.Next(0,cnt1)
    Dim id4 As Integer = rand.Next(0,cnt1)
    Dim vid As Integer = ids(id3)
    ids1(id3) = ids1(id4)
    ids1(id3) = vid
Next
dt.StopRedraw()
For i As Integer = 0 To Tables("窗口1_table1").Rows.count -1
If  Tables("窗口1_table1").Rows(i)("A市考官_姓名")= Nothing Then
 Tables("窗口1_table1").Rows(i)("A市考官_面试室号")=Tables("窗口1_table1").Rows(i)("主考官_面试室号")
Else
    Tables("窗口1_table1").Rows(i)("A市考官_面试室号")=ids1(i)+1
End If
Next
dt.ResumeRedraw()


--  作者:有点蓝
--  发布时间:2023/4/26 8:46:00
--  
参考5楼方式,改为使用select方法:http://www.foxtable.com/webhelp/topics/0400.htm,添加条件,只获取没有用过的面试室进行分配
--  作者:hrw68529
--  发布时间:2023/4/26 9:12:00
--  
有点蓝老师。如何排除主考官已用过的面试室号,谢谢
--  作者:有点蓝
--  发布时间:2023/4/26 9:23:00
--  
Dim drs As List(Of DataRow)
drs = DataTables("表A").Select("
面试室号 not in(\'" & DataTables("表B").GetComboListString("面试室号").replace("|","\',\'") & "\')")