Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
'''
Dim Da As DataTable = DataTables("样本")
Dim ls As List(of DataRow) = da.Select("班级 Is not null","班级")
Dim i,r,n As Integer
r =Da.Compute("Count(班级)","班级 Is not null")
r = -int(-r/3)
DataTables("排列表").DataRows.clear
Tables("排列表").Addnew(r)
For i =1 to 3
For n = 0 to r-1
Tables("排列表").Rows(n)("班级" & i) =Ls((i-1)*r+n)("班级")
Tables("排列表").Rows(n)("姓名"& i) = Ls((i-1)*r+n)("姓名")
Next
Next
Dim Count As Integer = Math.Ceiling(DataTables("样本").DataRows.Count / 3)
DataTables("排列表").DataRows.Clear()
Dim dr1,dr2 As DataRow
Tables("排列表").AddNew(Count)
For c As Integer = 0 To 2
For r As Integer = 0 To Count - 1
dr1 = DataTables("排列表").DataRows(r)
dr2 = DataTables("样本").DataRows(Count * c + r)
dr1("班级" & (c+1)) = dr2("班级")
dr1("姓名" & (c+1)) = dr2("姓名")
Next
Next
样本表中数据太有规律了,班级是排序的,班级的抽样人员是固定的3人。假设抽样人员不是固定的,比如6班级是4个人,追加到原来的表后面,未排序。要求拆分时,按班级序号连续拆分,而且,同一个班级人必须在同一列中,不能拆分到2列中。以上代码就要改改了。(先将班级列类型改为数字型)
Dim dr1,dr2 As DataRow
dim pmr as integer =Math.floor(datatables("样本").compute("count(班级)","班级 <> 0")/3) '排名表3等分后平均行数
Dim drs As List(Of DataRow) =datatables("样本").select("[班级]<> 0","班级") '取不含空行且排序后的样本表
dim r as integer=0 '排列表的行指针
dim c as integer=1 '排列表的列名序号指针
datatables("排列表").datarows.clear()
for i as integer = 0 to drs.count-1 '遍历有效的样本表
dr1=drs(i) '读样本表当前行
if r>= pmr then '排列表的当前指针行大于排名表3等分后的平均行数,
if dr1("班级")<>drs(i-1)("班级") '如果和上一行的班级不相同
c=c+1 ' 排列表的列指针加1
r=0 ' 排列表的行指针归0,指向第一行
end if
end if
if datatables("排列表").datarows.count<r+1 then ' 实际行数小于即将写数的指针行
dr2 = DataTables("排列表").AddNew() '增加行
else
dr2= DataTables("排列表").datarows(r)
end if
dr2("班级" & c)=dr1("班级") '填数据
dr2("姓名" & c)=dr1("姓名")
r=r+1
next
向老袁学习!思维严密,条理清晰!
一解多解,学习中.......