2012-12-20 126 views
1

嗨,我有以下功能:列表只返回一個值

Public Shared Function GetAbrechnung() As List(Of WochenBPlan) 


     Dim wbp = New WochenBPlan 
     Dim allBookings As List(Of WochenBPlan) = New List(Of WochenBPlan) 

     Dim strSQL As String = "SELECT DISTINCT d.ABTEILUNG, d.BEMERKUNG, d.BESTUHLUNG, d.RAUMID, d.ID, d.PERSONENZAHL, d.ADRESSE + ', ' + d.RAUMBEZEICHNUNG AS RAUMBEZEICHNUNG, d.THEMA, p.VN + ' ' + p.NN AS NAME, CONVERT (char(5), d.VON, 108) + ' - ' + CONVERT (char(5), d.BIS, 108) AS ZEIT, p.TEL FROM VIEW_RAUMBUCHUNG_DISPO AS d INNER JOIN PERSONAL AS p ON d.PERSONAL_ID = p.ID WHERE THEMA = 'EVENT'" 
     Dim objRS As SqlDataReader 

     objRS = SQLrunReaderWB(strSQL) 
     If objRS.HasRows Then 

      While objRS.Read() 

       wbp.Raum = objRS("RAUMBEZEICHNUNG") 
       wbp.Zeit = objRS("ZEIT") 

       If Not IsDBNull(objRS("ABTEILUNG")) Then 
        wbp.Bereich = objRS("ABTEILUNG") 
       End If 

       If Not IsDBNull(objRS("THEMA")) Then 
        wbp.Thema = objRS("THEMA") 
       End If 

       If Not IsDBNull(objRS("NAME")) Then 
        wbp.Mieter = objRS("NAME") 
       End If 

       If Not IsDBNull(objRS("TEL")) Then 
        wbp.Mieter_Tel = objRS("TEL") 
       End If 

       wbp.Personen = objRS("PERSONENZAHL") 
       wbp.Bestuhlung = objRS("BESTUHLUNG") 

       If Not IsDBNull(objRS("BEMERKUNG")) Then 
        wbp.Bemerkung = objRS("BEMERKUNG") 
       End If 



       allBookings.Add(wbp) 


      End While 


     Else 

     End If 

     ConnWB.Close() 
     Return allBookings 

End Function 

我的問題是我的,我已經產生了名單只是返回的最後一個值。什麼iam做錯了?有人可以幫忙嗎?

回答

2

您需要在循環內聲明您的範圍對象。如果你不這樣做,你只會得到同一個對象的引用,改變它,因此將成爲最後一個包含該列表的修改。

嘗試這樣的事:

Public Shared Function GetAbrechnung() As List(Of WochenBPlan) 

     Dim allBookings As List(Of WochenBPlan) = New List(Of WochenBPlan) 

     Dim strSQL As String = "SELECT DISTINCT d.ABTEILUNG, d.BEMERKUNG, d.BESTUHLUNG, d.RAUMID, d.ID, d.PERSONENZAHL, d.ADRESSE + ', ' + d.RAUMBEZEICHNUNG AS RAUMBEZEICHNUNG, d.THEMA, p.VN + ' ' + p.NN AS NAME, CONVERT (char(5), d.VON, 108) + ' - ' + CONVERT (char(5), d.BIS, 108) AS ZEIT, p.TEL FROM VIEW_RAUMBUCHUNG_DISPO AS d INNER JOIN PERSONAL AS p ON d.PERSONAL_ID = p.ID WHERE THEMA = 'EVENT'" 
     Dim objRS As SqlDataReader 

     objRS = SQLrunReaderWB(strSQL) 
     If objRS.HasRows Then 

      While objRS.Read() 

       'declare here a new instance to add on the list 
       Dim wbp = New WochenBPlan 

       wbp.Raum = objRS("RAUMBEZEICHNUNG") 
       wbp.Zeit = objRS("ZEIT") 

       If Not IsDBNull(objRS("ABTEILUNG")) Then 
        wbp.Bereich = objRS("ABTEILUNG") 
       End If 

       If Not IsDBNull(objRS("THEMA")) Then 
        wbp.Thema = objRS("THEMA") 
       End If 

       If Not IsDBNull(objRS("NAME")) Then 
        wbp.Mieter = objRS("NAME") 
       End If 

       If Not IsDBNull(objRS("TEL")) Then 
        wbp.Mieter_Tel = objRS("TEL") 
       End If 

       wbp.Personen = objRS("PERSONENZAHL") 
       wbp.Bestuhlung = objRS("BESTUHLUNG") 

       If Not IsDBNull(objRS("BEMERKUNG")) Then 
        wbp.Bemerkung = objRS("BEMERKUNG") 
       End If 


       ' add the reference to the new object on the list 
       allBookings.Add(wbp)  

      End While  

     'Else ---> you do not need this ELSE scope, just remove it 

     End If 

     ConnWB.Close() 

     Return allBookings 

End Function 
+0

非常感謝你,它的工作原理!我會接受你的回答,但我必須等待10分鐘。 – Paks

2

您需要在每次循環迭代創建WochenBPlan的新實例。否則,你只是改變以前的設置值。將此添加到您的循環中。

wbp = New WochenBPlan()