以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于集合问题出错-已解决  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=131324)

--  作者:ZJZK2018
--  发布时间:2019/2/23 2:55:00
--  关于集合问题出错-已解决
需求是: 先增加一个列名集合,先是4个字符匹配,再3字符匹配,再2字符匹配,如果匹配的字段就移除,不再重复匹配
在表DataColChanged事件中,下面代码出错:

Dim dr As DataRow = e.DataRow
Select Case e.DataCol.Name
    Case "名称"
        Dim lst As New List(Of String)
        For Each dc As Col In Tables("招标信息").Cols
            If lst.Contains(dc.Name) = False Then
                lst.Add(dc.Name)
            End If
        Next
        If e.NewValue IsNot Nothing Then
            If e.NewValue.Length >= 4 Then
                For i As Integer = 0 To e.NewValue.Length -4
                    Dim s As String = e.NewValue.Substring(i,4)
                    For Each nm As String In lst
                        If nm.Contains(s) Then
                            dr("标准名称") = nm
                            lst.Remove(nm)
                        End If
                    Next
                Next
            End If
            \'msgbox(String.Join("|",lst.ToArray))
            
            If e.NewValue.Length >= 2 Then
                For i As Integer = 0 To e.NewValue.Length -2
                    Dim s As String = e.NewValue.Substring(i,2)
                    For Each nm As String In lst
                        If nm.Contains(s) Then
                            dr("标准名称") = nm
                            lst.Remove(nm)
                        End If
                    Next
                Next
            End If
        End If
End Select

错误提示:

.NET Framework 版本:2.0.50727.8762
Foxtable 版本:2018.10.9.1
错误所在事件:表,招标公告,DataColChanged
详细错误信息:
调用的目标发生了异常。
集合已修改;可能无法执行枚举操作。
[此贴子已经被作者于2019/2/24 11:39:06编辑过]

--  作者:有点蓝
--  发布时间:2019/2/23 8:51:00
--  
截图说明一下,列名是怎么样的?匹配什么内容?
--  作者:ZJZK2018
--  发布时间:2019/2/23 10:55:00
--  

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


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


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:招标公告及标录.foxdb


[此贴子已经被作者于2019/2/23 11:16:21编辑过]

--  作者:有点蓝
--  发布时间:2019/2/23 11:20:00
--  
你的意思是要判断【招标信息】表的列名是否在【招标公告】表的名称里?



--  作者:ZJZK2018
--  发布时间:2019/2/23 11:39:00
--  
“招标公告”表中的名称与内容的列的数据是从网页下读取过来,标准名称列数据是根据“名称”列数据与招标信息表中的列名进行匹配得到
[此贴子已经被作者于2019/2/23 11:47:54编辑过]

--  作者:有点蓝
--  发布时间:2019/2/23 11:58:00
--  
Select Case e.DataCol.Name
    Case "名称"
        If e.NewValue > "" Then
            If DataTables("招标信息").DataCols.Contains(e.NewValue) Then
                e.DataRow(标准名称) = e.NewValue
            End If
        End If
End Select

--  作者:ZJZK2018
--  发布时间:2019/2/23 15:54:00
--  
不是这样的需求是: 
1、先增加一个“招标信息”表的列名集合,
2、当“招标公告”中名称列中增加一个字符时,先是4个连续字符与集合中字符匹配,如果有,则在“标准名称”列中填入,并在集合中移除此字符,
3、再3连续字符匹配,再2字符匹配,依次类推,如果匹配的字段就移除,不再重复匹配

如集合中的字符有:AABB,BBBCD,EEDD,ABCDF,1234
1、当在名称列中输入AABB时,先是4个连续字符与集合中字符匹配,标准名称列就为AABB,集合中移除此字符AABB,此时集合的值为:BBBCD,EEDD,ABCDF,1234
2、当在名称列中输入SABC时,先是4个连续字符与集合中字符匹配,如没有,3个连续字符与集合中字符匹配,SABCABCDF,标准名称为ABCDF,集合中移除此字符
[此贴子已经被作者于2019/2/23 16:14:07编辑过]

--  作者:有点蓝
--  发布时间:2019/2/23 17:29:00
--  
没看懂,举几个更具体的例子说明一下

典型的,“招标信息”表有“网上报名日期”和“报名日期起”,假如名称列输入“报名日期”,匹配哪一个?

另外“招标信息”表还有“开标日期”、“录入日期”......假如名称列输入“日期”,又匹配哪一个?

--  作者:ZJZK2018
--  发布时间:2019/2/23 17:47:00
--  
“招标信息”表有“网上报名日期”和“报名日期起”,假如名称列输入“报名日期”,如果集合中“报名日期起”排序在先哪么就匹配“报名日期起”,因为最后手工还要检查一次
“招标信息”表还有“开标日期”、“录入日期”......假如名称列输入“日期”,集合排序中哪个在先就匹配哪个

谢谢!

--  作者:ZJZK2018
--  发布时间:2019/2/24 1:12:00
--  
怎么没人理我?