integer类型的值无法转换为数据表vn.net



我正在尝试创建树视图,但有些错误我无法修复

Sub CREATENODE()
Dim TRN As New TreeNode
Dim DT As New DataTable
DT.Clear()
DT = ACCOUNTTableAdapter.TREE_ACCOUNT()
For I As Integer = 0 To DT.Rows.Count - 1
If DT.Rows(I)(9).ToString() = "00000000-0000-0000-0000-000000000000" Then
TRN = New TreeNode(DT.Rows(I)(3).ToString() + " " + DT.Rows(I)(4).ToString())
TRN.Tag = DT.Rows(I)(1).ToString()
If DT.Rows(I)(7).ToString() <> "0" Then
TRN.ImageIndex = 0
TRN.SelectedImageIndex = 0
Else
TRN.ImageIndex = 1
TRN.SelectedImageIndex = 1
End If

TreeView1.Nodes.Add(TRN)
End If
Next
''For Each NODE As TreeNode In TreeView1.Nodes
''    CHELD(NODE)
'Next
End Sub

这是无稽之谈

Dim TRN As New TreeNode 
Dim DT As New DataTable
DT.Clear()
DT = ACCOUNTTableAdapter.TREE_ACCOUNT()

您创建一个New TreeNode,然后在循环中用另一个New覆盖它。只需将Dim放在if.之后的循环中即可

Dim TRN = New TreeNode($"{row(3)} {row(4)}")

您创建了一个全新的DataTable。然后,当它不可能有任何东西时,你会清除它。然后你把它扔掉,并为它分配一个不同的DataTable。

只做

Dim DT = ACCOUNTTableAdapter.TREE_ACCOUNT()

我通过使用For Each循环简化了您的代码。此外,我使用并插入了字符串前面的$表示的字符串。变量可以插入到由大括号{}包围的位置。

至于实际问题,您需要使用New关键字创建表适配器的实例。然后调用适当的方法。一个简单的应用程序将只使用.GetData

Private Sub CREATENODE()
Dim DT = (New ACCOUNTTableAdapter).TREE_ACCOUNT() 'See what intellisense offers. It may be just .GetData
For Each row As DataRow In DT.Rows
If row(9).ToString() = "00000000-0000-0000-0000-000000000000" Then
Dim TRN = New TreeNode($"{row(3)} {row(4)}")
TRN.Tag = row(1)
If row(7).ToString() <> "0" Then
TRN.ImageIndex = 0
TRN.SelectedImageIndex = 0
Else
TRN.ImageIndex = 1
TRN.SelectedImageIndex = 1
End If
TreeView1.Nodes.Add(TRN)
End If
Next
End Sub

提示:为什么不将整行放在Tag属性中呢。通过将Tag强制转换回DataRow,您将可以访问所有字段。

最新更新