以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 取值问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=5652) |
||||||||||||||||||||||||||||||||
-- 作者:xl -- 发布时间:2009/12/25 18:41:00 -- 取值问题 下列设计中用到“Tables("课时名单").Rows(i)("计分") =e.Form.Controls(Values(0)).Value”一句,其中“e.Form.Controls(Values(0)).Value”的值当前窗口输入的“星期一至星期日的值”,我现欲改为从“表A”的“正课”列中取星期一至星期日的值,不知怎样修改?请各位老师看看。谢谢! 表A:
\'生成"课时名单"表 Dim ksmd As New DataTableBuilder("课时名单") ksmd.AddDef("姓名", GetType(String), 15) ksmd.AddDef("星期", GetType(String), 15) ksmd.AddDef("计分", GetType(Integer)) ksmd.TableVisible = false ksmd.Build()
\'生成"课时名单"数据 Dim Values() As String Dim n As Integer = Tables("课程表").rows.count Dim n1 As Integer for Each dc as Datacol in DataTables("课程表").Datacols if dc.name <> "班级" Then n1 = n1 +1 dim f As New Filler f.SourceTable = DataTables("课程表") \'指定数据来源 f.SourceCols = dc.name \'指定数据来源列 f.DataTable = DataTables("课时名单") \'指定数据接收表 f.DataCols = "姓名" \'指定数据接收列 f.Distinct = false f.Fill() \'填充数据 Values = dc.name.split("_") For i As integer = (n*n1)-n to Tables("课时名单").rows.count -1 Tables("课时名单").Rows(i)("星期") = Values(0) Tables("课时名单").Rows(i)("计分") =e.Form.Controls(Values(0)).Value Next end if Next [此贴子已经被作者于2009-12-25 18:42:08编辑过]
|
||||||||||||||||||||||||||||||||
-- 作者:czy -- 发布时间:2009/12/26 0:30:00 -- 有点难为大家了。 |
||||||||||||||||||||||||||||||||
-- 作者:xl -- 发布时间:2009/12/26 0:56:00 -- 我再仔细考虑一下,也许能解决问题。 |
||||||||||||||||||||||||||||||||
-- 作者:xl -- 发布时间:2009/12/26 10:27:00 -- 以下是引用czy在2009-12-26 0:30:00的发言:
有点难为大家了。 解决不了,传上文件请老师看一下
|
||||||||||||||||||||||||||||||||
-- 作者:czy -- 发布时间:2009/12/26 11:12:00 -- \'生成"课时名单"表 Dim ksmd As New DataTableBuilder("课时名单") ksmd.AddDef("姓名", GetType(String), 15) ksmd.AddDef("星期", GetType(String), 15) ksmd.AddDef("计分", GetType(Integer)) ksmd.Build() \'生成"课时名单"数据 Dim Values() As String Dim n As Integer = Tables("课程表").rows.count Dim n1 As Integer for Each dc as Datacol in DataTables("课程表").Datacols if dc.name <> "班级" Then n1 = n1 +1 dim f As New Filler f.SourceTable = DataTables("课程表") \'指定数据来源 f.SourceCols = dc.name \'指定数据来源列 f.DataTable = DataTables("课时名单") \'指定数据接收表 f.DataCols = "姓名" \'指定数据接收列 f.Distinct = false f.Fill() \'填充数据 Values = dc.name.split("_") For i As integer = (n*n1)-n to Tables("课时名单").rows.count -1 Dim dr As DataRow = DataTables("表A").Find("星期 = \'" & Values(0) & "\'") Tables("课时名单").Rows(i)("星期") = Values(0) Tables("课时名单").Rows(i)("计分") = dr("正课") Next end if Next |
||||||||||||||||||||||||||||||||
-- 作者:xl -- 发布时间:2009/12/26 13:14:00 -- 记住了,谢谢老师指点。复习一下帮助中相关知识: Find
在DataTable查找符合条件的行,如果找到的话,返回找到的行,否则返回Nothing。 语法: Find(Filter,Sort,Index) 示例一: Dim dr As DataRowdr = DataTables("产品").Find("产品编号 = \'03\'") \'找出编号为03的产品 With DataTables("订单") dr = .Find("产品 = \'PD01\'","日期") \'找出第一次订购PD01产品的记录 dr = .Find("产品 = \'PD01\'","日期",1) \'找出第二次订购PD01产品的记录 End With 实例二: 有的时候,我们需要查找倒数第几行数据,例如最近一次订购某某产品的记录。 Dim dr As DataRowWith DataTables("订单") dr = .Find("产品 = \'PD01\'","日期 Desc") \'找出最后一次订购PD01产品的记录 dr = .Find("产品 = \'PD01\'","日期 Desc",1) \'找出倒数第二次订购PD01产品的记录 End With 可以看到代码和原来几乎一样,唯一的变化是排序参数,被改为:日期 Desc 示例三 Dim dr As DataRowdr = DataTables("订单").Find("数量 > 1000","日期 Desc") If dr IsNot Nothing Then \'如果找到的话 Output.Show("日期:" & dr("日期")) Output.Show("客户:" & dr("日期")) End If 如果我们不加上判断,直接: Dim dr As DataRowdr = DataTables("订单").Find("数量 > 1000","日期 Desc") Output.Show("日期:" & dr("日期")) Output.Show("客户:" & dr("日期")) 一旦订单表并不存在订购数量超过1000的订单,那么Find方法返回Nothing,导致后续代码运行出错。
Select 以集合的形式,返回所有符合指定条件的行。 语法: Filter: 条件表达式,请参考表达式的运算符和函数 我们经常需要对符合某一条件的记录,统一进行处理,此时Select方法就派上用场了。 例如,对于1999年1月4日订购PD01的订单,希望将其折扣统一设置为0.12,代码为: Dim drs As List(Of DataRow)drs = DataTables("订单").Select("[产品] = \'PD01\' And [日期]= #1/4/1999#") For Each dr As Datarow In drs dr("折扣") = 0.12 Next 再例如,希望列出1999年1月4日订购PD01的客户,按订购的数量排序: Dim drs As List(Of DataRow)drs = DataTables("订单").Select("[产品] = \'PD01\' And [日期]= #1/4/1999#","数量 DESC") For Each dr As Datarow In drs Output.show(dr("客户")) Next 下面是一个典型的应用,在一个成绩表中,包括班级、姓名、总分、总分排名几列数据,希望按班级自动生成总分排名: \'获得所有班级名称,保存在集合中 上面的例子,可以参考CaseStudy目录下的文件:成绩排名.Table
|