首页 > 解决方案 > 如何将数据表转换为 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

如果您需要任何进一步的信息,请告诉我。谢谢你的帮助!

标签: vb.netvisual-studio

解决方案


这是一个进行转换的函数。当然,我不知道这些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因为那是参数的类型。我不确定您将其他与什么进行比较,但这不是问题所要问的。


推荐阅读