2017-02-08 3 views
1

Der Code soll alle Artikel in der richtigen Kategorie auf einmal ausgeben. Stattdessen werden alle einzeln aufgelistet.Die Ausgabe kann nicht richtig gruppiert werden

Es soll wie folgt aussehen:

Living Room 
Item Number-Item Description 
Item Number-Item Description 
Kitchen 
Item Number-Item Description 
Item Number-Item Description 
Bathroom 
Item Number-Item Description 
Item Number-Item Description 

Stattdessen wird dies zu tun:

Living Room 
Item Number-Item Description 
Kitchen 
Item Number-Item Description 
Bathroom 
Item Number-Item Description 
Living Room 
Item Number-Item Description 
Kitchen 
Item Number-Item Description 
Bathroom 
Item Number-Item Description 

Private Sub btnRoom_Click(sender As Object, e As EventArgs) Handles btnRoom.Click 

    Dim q = From asset In assets 
      Let parts = asset.Split(","c) 
      Let itemNumber = parts(0) 
      Let itemDesc = parts(1) 
      Let productCode = parts(2) 
      Let purchaseDate = parts(3) 
      Let purchasePrice = CDec(parts(4)) 
      Let currentValue = CDec(parts(5)) 
      Let life = parts(6) 
      Let latestDate = parts(7) 
      Let depreciation = depreciation(purchasePrice, currentValue) 
      Let room = FindRoom(itemNumber.Substring(0, 3)) 
      Distinct 


    lstDisplay.Items.Clear() 
    lstDisplay.Items.Add("Assets Listed By Room") 
    lstDisplay.Items.Add(" ") 
    For Each thing In q 

     lstDisplay.Items.Add("Item Number : " & thing.itemNumber & 
          " --- Item Description: " & thing.itemDesc) 
    Next 
End Sub 

Function FindRoom(find As String) As String 

    If find = "LVR" Then 
     lstDisplay.Items.Add("Living Room") 
    ElseIf find = "KIT" Then 
     lstDisplay.Items.Add("Kitchen") 
    ElseIf find = "REC" Then 
     lstDisplay.Items.Add("Recreational Room") 
    ElseIf find = "MBR" Then 
     lstDisplay.Items.Add("Master Bedroom") 
    ElseIf find = "SBR" Then 
     lstDisplay.Items.Add("Second Bedroom") 
    Else 
     lstDisplay.Items.Add("Bathroom") 
    End If 
    Return find 
End Function 
+0

'Handles' ist kein VBA-Schlüsselwort. Das ist vb.net. Ich ändere das Etikett. –

+0

Entschuldigung, Entschuldigung. – Kyle

+0

Wenn sich jemand entschuldigen sollte, sollte es Microsoft sein, um diese terminologische Verwirrung zu schaffen :) –

Antwort

1

Hier wird die Probe Sie begonnen zu erhalten (nicht getestet):

Private Sub btnRoom_Click(sender As Object, e As EventArgs) Handles btnRoom.Click 

    Dim groups = assets.GroupBy(Function(line) line.Substring(0, 3)) 

    For Each group In groups 

     Select Case group.Key 
      Case "LVR" : lstDisplay.Items.Add("Living Room") 
      Case "KIT" : lstDisplay.Items.Add("Kitchen") 
      Case "REC" : lstDisplay.Items.Add("Recreational Room") 
      Case "MBR" : lstDisplay.Items.Add("Master Bedroom") 
      Case "SBR" : lstDisplay.Items.Add("Second Bedroom") 
      Case "BAT" : lstDisplay.Items.Add("Bathroom") 
      Case Else : lstDisplay.Items.Add(group.Key) 
     End Select 

     For Each line In group 

      Dim parts = Split(line, ",", 3) 

      lstDisplay.Items.Add("Item Number : " & parts(0) & 
         " --- Item Description: " & parts(1)) 
     Next 

    Next 

End Sub 
+0

Das funktioniert perfekt. Ich danke dir sehr. Was ist der 'group.Key' Code? Wir sind noch nicht darüber hinweggegangen. – Kyle

+0

Die ['.GroupBy'] (https://msdn.microsoft.com/en-us/library/bb534501) LINQ-Erweiterung erhält eine Liste von [IGrouping ] (https://msdn.microsoft. com/de-us/library/bb344977) Gruppen, in denen die Eigenschaft '.Key' jeder Gruppe den Wert hat, nach dem gruppiert wird (' line.Substring (0, 3) '). Ich kann mir keinen einfacheren Weg vorstellen, es zu erklären, daher könnte es einfacher sein, mit dem Debugger durch den Code zu gehen, um die Gruppen zu sehen. – Slai

Verwandte Themen