以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]引用中的DataTable类型  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=15092)

--  作者:daishunhui
--  发布时间:2011/12/12 18:26:00
--  [求助]引用中的DataTable类型
If e.DataCol.Name = "回路代码"Then \'发生变化的是产品编号吗?
    \'在产品表找出该产品
    Dim dr As DataRow       
    Select Case e.DataRow("回路类型")
        Case "电动机"
            dr = DataTables("电动机").Find("回路代码= " & "\'" & e.DataRow("回路代码") & "\'" )
        Case "馈线"
             dr = DataTables("馈线").Find("回路代码= " & "\'" & e.DataRow("回路代码") & "\'" )
    End Select
    If dr IsNot Nothing \'如果找到, 则设置各列内容
        e.DataRow("属性1")= dr("属性1")
        e.DataRow("属性2")= dr("属性2")
    End If
End If

图片点击可在新窗口打开查看此主题相关图片如下:引用.jpg
图片点击可在新窗口打开查看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:数据引用.table
如图所示,需要在“回路类型”的数据表中查找“回路代码”,取相关数据,上面代码能够实现需要功能,但是需要查找的表如果很多就需要很多Case语句,能不能根据“回路类型”即数据表名用一句来实现。
dr = DataTables(e.DataRow("回路类型")).Find("回路代码= " & "\'" & e.DataRow("回路代码") & "\'" )
会报错,结果好像对的。

[此贴子已经被作者于2011-12-12 18:28:44编辑过]

--  作者:daishunhui
--  发布时间:2011/12/13 9:45:00
--  

那位热心朋友帮帮忙,使用

dr = DataTables(e.DataRow("回路类型")).Find("回路代码= " & "\'" & e.DataRow("回路代码") & "\'" )

 

如果“回路类型”没有空行是对的,有空行运行会报错,增加空判断

If e.DataRow("回路类型") IsNot Nothing

dr = DataTables(e.DataRow("回路类型")).Find("回路代码= " & "\'" & e.DataRow("回路代码") & "\'" )

 

End If

运行时还是会报错


--  作者:狐狸爸爸
--  发布时间:2011/12/13 10:22:00
--  

这样就不需要好多Case了:

 

If e.DataCol.Name = "回路代码"Then
    Dim dr As DataRow
    Dim nm As String = e.DataRow("回路类型")
    If DataTables.Contains(nm) Then
        dr = DataTables("电动机").Find("回路代码= " & "\'" & e.DataRow("回路代码") & "\'" )
    End If
    If dr IsNot Nothing \'如果找到, 则设置各列内容
        e.DataRow("属性1")= dr("属性1")
        e.DataRow("属性2")= dr("属性2")
    End If
End If

 

另外: 如果数据结构基本一样,没有必要分开这么多个表。


--  作者:daishunhui
--  发布时间:2011/12/13 10:49:00
--  
谢谢狐狸爸爸