通常应该在代码中判断是否找到了符合条件的行,然后再运行后续的代码。 例如要找出最近一次订购产品数量超过1000的订单,并显示订单的日期和客户: Dim dr As DataRow
dr = DataTables(\订单\).Find(\数量 > 1000\,\日期 Desc\) If dr IsNot Nothing Then '如果找到的话 Output.Show(\日期:\ & dr(\日期\)) Output.Show(\客户:\ & dr(\客户\)) End If
如果我们不加上判断,直接: Dim dr As DataRow
dr = DataTables(\订单\).Find(\数量 > 1000\,\日期 Desc\) Output.Show(\日期:\ & dr(\日期\)) Output.Show(\客户:\ & dr(\客户\))
一旦订单表并不存在订购数量超过1000的订单,那么Find方法返回Nothing,导致后续代码运行出错。
Find函数只能找出一条符合条件的行,如果要同时找出所有符合条件的行,可以使用Select方法。
Select
以集合的形式,返回所有符合指定条件的行。 语法:
Select(Filter) Select(Filter,Sort)
Filter: 条件表达式,请参考表达式的运算符和函数 和 条件表达式。 Sort: 可选参数,指定排序方式
我们经常需要对符合某一条件的记录,统一进行处理,此时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
上面的代码将Sort参数设置为“数量 DESC”,这样返回的行不仅按数量排序,而且数量多的行排在前面。 示例三
Filter参数不能省略,如果希望返回所有行,将Filter参数设置为\即可。 例如希望按总分高低,依次显示所有学生的姓名:
For Each dr As DataRow In DataTables(\成绩表\).Select(\,\总分 DESC\) Output.Show(dr(\姓名\)) Next
DeleteFor
删除符合条件的行。 语法:
DeleteFor(Filter)
Filter: 一个表达式,用于指定删除条件,请参考表达式的运算符和函数 和 条件表达式 例如:
删除订单表中2007年2月1日以前的行,代码为:
DataTables(\订单\).DeleteFor(\日期] < #2/1/2007#\)
RemoveFor
移除符合条件的行。
所谓移除行,只是让用户再也看不到这些被移除的行,就像这些行从来没有被加载过一样;移除行从来都不会真正从文件中删除行,重新打开文件后,被移除的行将再次出现。
语法:
RemoveFor(Filter)
Filter: 指定移除条件。请参考表达式的运算符和函数 和 条件表达式。 例如:
DataTables(\订单\).RemoveFor(\产品] = 'PD01'\) ReplaceFor
找出符合条件的行,并将指定列的内容替换为指定值。 语法:
ReplaceFor(DataColName,Value,Filter) DataColName:替换的列 Value: 替换值
Filter: 替换条件,请参考表达式的运算符和函数 和 条件表达式。
例如将订单表中,订购数量大于600的订单的折扣设为0.15,只需简单的一行代码即可: DataTables(\订单\).ReplaceFor(\折扣\, 0.15, \数量] > 600\) 如果不用ReplaceFor,最精简的代码也是:
For Each dr As DataRow in DataTables(\订单\).Select(\数量] > 600\) dr(\折扣\) = 0.15 Next
RejectChanges
撤销自打开文件或最近一次保存以来,对该表做出的修改。 示例
撤销对表A的修改:
DataTables(\表A\).RejectChanges()
StopRedraw
我们对表做的任何变动,例如编辑数据、增加行、删除行、调整行高列宽,都会导致Table重新绘制,以便显示变动后的结果。
如果要对DataTable连续地进行大量的操作,为了避免相关Table(表)不停地闪烁,可以先执行StopRedraw方法禁止绘制表,操作完成后再执行ResumeRedraw方法重新绘制表。
StopRedraw方法会禁止绘制所有基于该DataTable的Table,直到执行ResumeRedraw方法恢复绘制。
例如我们要在订单表中增加500行,代码如下: With DataTables(\订单\) .StopRedraw
For i As Integer = 1 To 500 .AddNew() Next
.ResumeRedraw End With
注意最后一定要记得执行ResumeRedraw方法,否则表格不会再刷新。 如果你将代码修改为: With DataTables(\订单\) For i As Integer = 1 To 500 .AddNew() Next End With
你可以看到代码执行过程中会不停地闪烁,而且执行速度也比之前慢很多。
StopRedraw和ResumeRedraw必须配对执行,如果执行了两次StopRedraw,那么对应的就必须执行两次ResumeRedraw,才会恢复绘制Table。
上面的代码只是用于演示,实际上增加500行最简单的代码是: DataTables(\订单\).AddNew(500) 属性 属性名 Type Name Caption HasChanges AllowEdit AllowAddNew 说明 整数型,返回一个整数,表示DataTable的类型 字符型,返回DataTable的名称 字符型,返回DataTable的标题 逻辑型,判断DataTable的数据是否已经被修改 逻辑型,是否允许用户修改表中数据 逻辑型,是否允许用户增加行 AllowClipBoard AllowInitialize AutoAddNew AllowDelete AllowLockRow AllowUnlockRow AllowDragColumn AllowFreezeColumn AllowResizeColumn AllowResizeRow AllowResizeSingleRow EnterKeyActionDown TabKeyActionDown MultiRowHeader FillLoadTimeOut SourceType 逻辑型,是否允许复制粘贴数据。 逻辑型,是否允许初始化此表。 逻辑型,是否自动增加行 逻辑型,是否允许用户删除行 逻辑型,是否允许用户锁定行 逻辑型,是否允许用户取消锁定行 逻辑型,是否允许通过拖动列标题来调整列位置 逻辑型,是否允许通过鼠标拖动来调整冻结区 逻辑型,是否允许通过鼠标拖动来调整列宽 逻辑型,是否允许通过鼠标拖动来调整行高 逻辑型,是否允许单独调整某一行的高度 逻辑型,按回车键是否向下移到另一单元格 逻辑型,按Tab键是否向下移到另一单元格 逻辑型,是否启用多层表头。 整数型,设置加载数据时的超时时限,默认30秒,一般不需要设置此属性。 整数型,返回数据源的类型,0表示Access,1表示SQL Server,2表示Oracle。 方法 方法 AddNew Compute Find Select Save ReplaceFor DeleteFor RemoveFor RejectChanges AcceptChanges GetUniqueValues GetComboListString 说明 在DataTable中增加一行,并返回所增加的行 根据指定的条件计算指定的内容 在DataTable查找符合条件的行,如果找到的话,返回找到的行,否则返回Nothing 以集合的形式,返回所有符合指定条件的行 保存数据 找出符合条件的行,并将指定列的内容替换为指定值 删除符合条件的行 移除符合条件的行 撤销自打开文件或最近一次保存以来,对该表做出的修改。 接受所有修改结果,使得这些修改不被保存。 从指定列中,获取不重复的值,以集合的形式返回 从指定的列中提取不重复的值,用符号\将这些值连接成一个字符串,并返回这个字符串
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库foxtable编程(3)在线全文阅读。
相关推荐: