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

如图所示,需要在“回路类型”的数据表中查找“回路代码”,取相关数据,上面代码能够实现需要功能,但是需要查找的表如果很多就需要很多Case语句,能不能根据“回路类型”即数据表名用一句来实现。
dr = DataTables(e.DataRow("回路类型")).Find("回路代码= " & "'" & e.DataRow("回路代码") & "'" )
会报错,结果好像对的。
[此贴子已经被作者于2011-12-12 18:28:44编辑过]
那位热心朋友帮帮忙,使用
dr = DataTables(e.DataRow("回路类型")).Find("回路代码= " & "'" & e.DataRow("回路代码") & "'" )
如果“回路类型”没有空行是对的,有空行运行会报错,增加空判断
If e.DataRow("回路类型") IsNot Nothing
dr = DataTables(e.DataRow("回路类型")).Find("回路代码= " & "'" & e.DataRow("回路代码") & "'" )
End If
运行时还是会报错
这样就不需要好多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
另外: 如果数据结构基本一样,没有必要分开这么多个表。