VB.NET WPF正确填充datagrid

VB.NET WPF正确填充datagrid,wpf,vb.net,datagrid,Wpf,Vb.net,Datagrid,我希望从表中提取数据,然后将其添加到列表中,然后使用该列表填充datagrid;然而,在执行此操作时,我在网格上得到了错误的填充,尽管我知道我正在访问循环中的正确记录 这是我的密码: Public Class Room Private _RoomNumber As String Public Property RoomNumber As String Get Return _RoomNumber End Get

我希望从表中提取数据,然后将其添加到列表中,然后使用该列表填充datagrid;然而,在执行此操作时,我在网格上得到了错误的填充,尽管我知道我正在访问循环中的正确记录

这是我的密码:

    Public Class Room

    Private _RoomNumber As String
    Public Property RoomNumber As String
        Get
            Return _RoomNumber
        End Get
        Set(ByVal value As String)
            _RoomNumber = value
        End Set
    End Property

    Private _PatientName As String
    Public Property PatientName As String
        Get
            Return _PatientName
        End Get
        Set(value As String)
            _PatientName = value
        End Set
    End Property

    Private _Physician As String
    Public Property Physician As String
        Get
            Return _Physician
        End Get
        Set(value As String)
            _Physician = value
        End Set
    End Property

    Private _Nurse As String
    Public Property Nurse As String
        Get
            Return _Nurse
        End Get
        Set(value As String)
            _Nurse = value
        End Set
    End Property

    Private _SchedTime As String
    Public Property SchedTime As String
        Get
            Return _SchedTime
        End Get
        Set(value As String)
            _SchedTime = value
        End Set
    End Property

    Private _ArrivalTime As String
    Public Property ArrivalTime As String
        Get
            Return _ArrivalTime
        End Get
        Set(value As String)
            _ArrivalTime = value
        End Set
    End Property

    Private _ES As String
    Public Property ES As String
        Get
            Return _ES
        End Get
        Set(value As String)
            _ES = value
        End Set
    End Property

End Class

Private Sub loadPage() Handles MyBase.Loaded
    Dim newList As New List(Of Room)
    newList = getData()
    MedDayDataGrid.ItemsSource = newList
End Sub

Private Function getData() As List(Of Room)
    Dim connection As New ODBCConnection() //Left this out for obv reasons
    connection.Open()
    Dim query As String = "SELECT visit.visit_name, visit.visit_admit_date, visit.visit_id, ip_visit_1.ipv1_room FROM visit INNER JOIN ip_visit_1 ON visit.visit_id=ip_visit_1.ipv1_num WHERE visit.visit_disch_date = '0001-01-01' AND ip_visit_1.ipv1_room LIKE 'MDH%' ORDER BY ip_visit_1.ipv1_room"
    Dim myCommand As New OdbcCommand(query, connection)

    Dim myRoom As New Room
    Dim myList As New List(Of Room)

    Dim myReader As OdbcDataReader = myCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection)
    While myReader.Read()
        myRoom.RoomNumber = myReader.GetString(3)
        myRoom.PatientName = myReader.GetString(0)
    End While

    myReader.Close()

    connection.Close()
    connection = Nothing

    Return myList
End Function

返回的数据在我的网格上20次显示添加到列表中的最后记录,而不是在getData()函数中显示添加到列表中的20个单独房间中的每个房间。任何帮助都将不胜感激。

您需要为查询返回的每一行创建一个新的
房间
实例,并将其添加到
列表
,例如

Private Function getData() As List(Of Room)
    Dim connection As New ODBCConnection() //Left this out for obv reasons
    connection.Open()
    Dim query As String = "SELECT visit.visit_name, visit.visit_admit_date, visit.visit_id, ip_visit_1.ipv1_room FROM visit INNER JOIN ip_visit_1 ON visit.visit_id=ip_visit_1.ipv1_num WHERE visit.visit_disch_date = '0001-01-01' AND ip_visit_1.ipv1_room LIKE 'MDH%' ORDER BY ip_visit_1.ipv1_room"
    Dim myCommand As New OdbcCommand(query, connection)

    Dim myList As New List(Of Room)

    Dim myReader As OdbcDataReader = myCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection)
    While myReader.Read()
        Dim myRoom As New Room
        myRoom.RoomNumber = myReader.GetString(3)
        myRoom.PatientName = myReader.GetString(0)
        myList.Add(myRoom)
    End While

    myReader.Close()

    connection.Close()
    connection = Nothing

    Return myList
End Function

您需要为查询返回的每一行创建一个新的
Room
实例,并将其添加到
列表中,例如

Private Function getData() As List(Of Room)
    Dim connection As New ODBCConnection() //Left this out for obv reasons
    connection.Open()
    Dim query As String = "SELECT visit.visit_name, visit.visit_admit_date, visit.visit_id, ip_visit_1.ipv1_room FROM visit INNER JOIN ip_visit_1 ON visit.visit_id=ip_visit_1.ipv1_num WHERE visit.visit_disch_date = '0001-01-01' AND ip_visit_1.ipv1_room LIKE 'MDH%' ORDER BY ip_visit_1.ipv1_room"
    Dim myCommand As New OdbcCommand(query, connection)

    Dim myList As New List(Of Room)

    Dim myReader As OdbcDataReader = myCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection)
    While myReader.Read()
        Dim myRoom As New Room
        myRoom.RoomNumber = myReader.GetString(3)
        myRoom.PatientName = myReader.GetString(0)
        myList.Add(myRoom)
    End While

    myReader.Close()

    connection.Close()
    connection = Nothing

    Return myList
End Function

我根本看不出你是如何显示任何数据的。在
getData
中,您似乎没有向
myList
添加任何内容。问题中是否遗漏了一些代码?假设某个地方有一个
Add
,您的问题可能是您没有为每一行创建一个新的
Room
,并且正在为每一行重用相同的实例-从而将相同的实例添加到列表中20次,每次都会覆盖这些值-导致为所有项目设置最后一行的值,因为它们实际上是同一个对象。很抱歉,我在调试时意外遗漏了我的外接程序。我的add在myreader.read()的while循环中。你的回答正是我需要的。我并不是每次都创建一个新的房间实例。我根本看不出你是如何得到任何显示的数据的。在
getData
中,您似乎没有向
myList
添加任何内容。问题中是否遗漏了一些代码?假设某个地方有一个
Add
,您的问题可能是您没有为每一行创建一个新的
Room
,并且正在为每一行重用相同的实例-从而将相同的实例添加到列表中20次,每次都会覆盖这些值-导致为所有项目设置最后一行的值,因为它们实际上是同一个对象。很抱歉,我在调试时意外遗漏了我的外接程序。我的add在myreader.read()的while循环中。你的回答正是我需要的。我并不是每次都创建房间的新实例。