以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]一段查询代码问题,一直找不到原因 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=14507) |
-- 作者:飞鱼 -- 发布时间:2011/11/22 10:47:00 -- [求助]一段查询代码问题,一直找不到原因 我写了一段事件代码,实现的功能是: 1、定义一个数组 2、历遍数组中的每一个字符串,在另外一个表中查找这个字符串 3、把找到的内容填充到一个临时表,同时退出查找,如果没有找到,就继续下一个字符串的查找 现在的问题是: 如果数组中的第一个字符串没找到,程序就不会查找下一个字符串的信息了。 大侠帮我看下这段代码,错误到底出在哪里?谢谢! Dim dr As DataRow=e.DataRow Dim drs As List(of DataRow) If e.DataCol.Name="查找的多型号资料" Then \'如果没有输入查询则清空该行 If e.DataRow.IsNull("查找的多型号资料") Then For Each a As DataCol In DataTables("多型号兼容查询").Datacols dr(a.name)=Nothing Next Else Dim s As String s=dr("查找的多型号资料") s=s.ToLower() \'统一转换为小写 Dim s1 As String \'定义数组中的单个字符串 Dim values() As String \'定义一个字符串数组 values=s.split(",") \'把s分割后的字符,组成数组values For Index As Integer = 0 To Values.Length -1 \'从数组中取出一个值 s1=Values(Index) Dim filter As String filter="[ReplacementFor] like \'*" & s1 & "*\' or [FitMachineModels] Like \'*" & s1 & "*\'" \'定义查找条件 drs=DataTables("BPB量产电池").Select(filter) If drs IsNot Nothing Then ‘如果找到了 Dim n As Integer=drs.count dr("符合数量")=n dr("可查到的型号")=s1 With DataTables("多兼容型号查询").DataRows \'清除临时表所有历史行 .Clear() End With Dim f As New Filler \'把查找到的结果填充到临时表 f.SourceTable = DataTables("BPB量产电池") f.filter=filter f.DataTable = DataTables("多兼容型号查询") f.DataCols ="产品名称,Code,Capacity,Voltage" f.Fill() Exit For \'找到的话就退出循环 Else \'没找到就继续 Continue For End If Next End If End If |
-- 作者:狐狸爸爸 -- 发布时间:2011/11/22 11:02:00 -- Dim dr As DataRow=e.DataRow Dim drs As List(of DataRow) If e.DataCol.Name="查找的多型号资料" Then \'如果没有输入查询则清空该行 If e.DataRow.IsNull("查找的多型号资料") Then For Each a As DataCol In DataTables("多型号兼容查询").Datacols dr(a.name)=Nothing Next Else Dim s As String s=dr("查找的多型号资料") s=s.ToLower() \'统一转换为小写 Dim s1 As String \'定义数组中的单个字符串 Dim values() As String \'定义一个字符串数组 values=s.split(",") \'把s分割后的字符,组成数组values For Index As Integer = 0 To Values.Length -1 \'从数组中取出一个值 s1=Values(Index) Dim filter As String filter="[ReplacementFor] like \'*" & s1 & "*\' or [FitMachineModels] Like \'*" & s1 & "*\'" \'定义查找条件 drs=DataTables("BPB量产电池").Select(filter) If drs.Count > 0 Then \'如果找到了 Dim n As Integer=drs.count dr("符合数量")=n dr("可查到的型号")=s1 With DataTables("多兼容型号查询").DataRows \'清除临时表所有历史行 .Clear() End With Dim f As New Filler \'把查找到的结果填充到临时表 f.SourceTable = DataTables("BPB量产电池") f.filter=filter f.DataTable = DataTables("多兼容型号查询") f.DataCols ="产品名称,Code,Capacity,Voltage" f.Fill() Exit For \'找到的话就退出循环 Else \'没找到就继续 Continue For End If Next End If End If |
-- 作者:飞鱼 -- 发布时间:2011/11/22 11:07:00 -- 果然解决了! 那么If drs IsNot Nothing为什么不可以呢? |
-- 作者:狐狸爸爸 -- 发布时间:2011/11/22 11:10:00 -- drs怎么可能为Nothing,你这是select,即使没有任何一行,也会返回一个集合,只是集合中的行数等于0而已。 find才会返回nothing |