【发布时间】:2021-11-11 08:45:02
【问题描述】:
我有两个 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
如果您需要任何进一步的信息,请告诉我。感谢您的帮助!
【问题讨论】:
-
你不能神奇地将一种类型的对象变成另一种类型的对象。为了使
CType工作,DataTable类中必须有代码来创建ISAACService类型的对象,用来自DataTable的数据填充它,然后返回它。没有这样的代码,因此您必须编写自己的方法,将DataTable作为输入,创建并填充ISAACService,然后返回它。 -
另外,鉴于
DataTable通常包含多个DataRows,您确定生成单个ISAACService对象有意义吗?它实际上应该是此类对象的数组或集合吗?每行一个? -
@jmcilhinney 不,这没有意义,你是对的,你能告诉我如何使用 DataTable 中的数据填充 ISAAC 服务吗?我应该使用构造函数吗?
-
创建一个实例并设置属性,就像对任何其他对象一样。如果需要,您可以添加带参数的构造函数,但您知道该类型是什么以及做什么,因此您需要决定这样做是否有意义。
-
@jmcilhinney 但我需要为每一行创建一个实例,对吗?当我使用 for each 循环执行此操作时,如何管理每个实例都有不同的名称?
标签: vb.net visual-studio