vb.net - 如何将数据表转换为 vb.net 中的对象?
问题描述
我有两个 DataTable(dt1 和 dt2),我想将它们转换为类的对象(data1 和 data2),所以我可以使用 compareTo 方法将其放入绑定列表中。
Public Class MainForm
Public dt1, dt2 As DataTable
Public data1, data2 As ISAACService
Private Sub btnDatei1_Click(sender As Object, e As EventArgs) Handles btnDatei1.Click
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
If File.Exists(OpenFileDialog1.FileName) Then
dt1 = FileGenerator.ReadFromProtectedFile(OpenFileDialog1.FileName)
dgv1.DataSource = dt1
End If
End If
End Sub
Private Sub btnVergleich_Click(sender As Object, e As EventArgs) Handles btnVergleich.Click
CompareDataTables()
End Sub
Private Sub btnDatei2_Click(sender As Object, e As EventArgs) Handles btnDatei2.Click
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
dt2 = FileGenerator.ReadFromProtectedFile(OpenFileDialog1.FileName)
dgv2.DataSource = dt2
End If
End Sub
Private Sub CompareDataTables()
data1 = CType(dt1, ISAACService)
For i = 0 To dt1.Rows.Count - 1
If i < dt2.Rows.Count Then
Dim row1 = dt1.Rows(i)
Dim row2 = dt2.Rows(i)
data1.CompareTo(data2)
'
End If
Next
End Sub
End Class
compareTo 方法:
Public Function CompareTo(other As ISAACService) As Integer Implements IComparable(Of ISAACService).CompareTo
If other.GetType() Is GetType(ISAACService) Then
other = CType(other, ISAACService)
If Me.UANR > other.UANR Then
Return 1
ElseIf Me.UANR < other.UANR Then
Return -1
Else
Return 0
End If
End If
Return 0
End Function
对象的类:
Public MustInherit Class ISAACServiceBase
ReadOnly Property KostenArt As String
ReadOnly Property UANR As String
ReadOnly Property Überbegriff As String
ReadOnly Property Benennung As String
ReadOnly Property Anzahl As Double
ReadOnly Property Einheit As String
ReadOnly Property Einzelkosten As Double
ReadOnly Property Gesamtmenge As Integer
ReadOnly Property Z As String
Public Sub New()
End Sub
Public Sub New(kArt As String, uNR As String, üBegriff As String, bnung As String, anzl As Double, enht As String, eKosten As Double, gMenge As Integer, zz As String)
KostenArt = kArt
UANR = uNR
Überbegriff = üBegriff
Benennung = bnung
Anzahl = anzl
Einheit = enht
Einzelkosten = eKosten
Gesamtmenge = gMenge
Z = zz
End Sub
End Class
如果您需要任何进一步的信息,请告诉我。谢谢你的帮助!
解决方案
这是一个进行转换的函数。当然,我不知道这些DataTable
字段是否与类的属性一致。您可能必须更改row
.
Private Function CovertDataTableToListOfISAACService(dt As DataTable) As List(Of ISAACService)
Dim lst As New List(Of ISAACService)
For Each row As DataRow In dt.Rows
Dim ISAAC As New ISAACService(row(0).ToString, row(1).ToString, row(2).ToString, row(3).ToString, CDbl(row(4)), row(5).ToString, CDbl(row(6)), CInt(row(7)), row(8).ToString)
lst.Add(ISAAC)
Next
Return lst
End Function
您的比较函数开始验证other
. other 已经保证是,ISAACService
因为那是参数的类型。我不确定您将其他与什么进行比较,但这不是问题所要问的。
推荐阅读
- laravel - 过滤器的组合可以是可选的 laravel 雄辩关系
- java - 事务部分提交或回滚
- java - 从骆驼 xmpp 发送消息时出现问题,jid 格式错误
- python - 如何获取列表中对象的连续子字符串的数量?
- c# - 如何将日期转换为 DateValue 代码(如在 vba 中)?
- python - 根据 python 上的特定标签将 HTML 字符串拆分为多个部分
- pdf - 将 LaTex 表格中的每个元素居中
- amazon-web-services - AWS Insights 嵌套查询?
- c# - .Net Core Console 应用程序未在 Docker 容器中运行
- ios - 动画UILabel从后台返回时消失