befüllte ArrayList beinhaltet nur die gleichen Elemente

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Artentus.

    befüllte ArrayList beinhaltet nur die gleichen Elemente

    Hallo Leute,

    sitze seit etlichen Tagen an einem Problem, welches recht lächerlich ist. Ich komme nur nicht auf den Fehler.

    Ich habe 2 ArrayLists. In der einen List (arlBetriebe) liegen Arrays der Form:

    VB.NET-Quellcode

    1. arDims(0) = "AbsabudgM1"
    2. arDims(1) = ""
    3. arDims(2) = "1"
    4. arDims(3) = ""
    5. arDims(4) = ""
    6. arDims(5) = ""
    7. arDims(6) = ""
    8. arDims(7) = ""
    9. arDims(8) = ""


    Die zweite ArrayList (arlQueryable) soll nach klick auf einen Meüeintrag dann folgende 3 Arrays beinhalten:

    VB.NET-Quellcode

    1. [{"AbsabudgM1","1","1","","","","","",""},{"AbsabudgM1","2","1","","","","","",""},{"AbsabudgM1","3","1","","","","","",""}]


    Hier ist ein Auszug aus dem Quellcode meines Projektes, welcher das bewerkstelligen soll:

    VB.NET-Quellcode

    1. Public arlQueryable As New ArrayList
    2. Public arlBetriebe As New ArrayList
    3. Private Sub NeuAuswertenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NeuAuswertenToolStripMenuItem.Click
    4. 'Unternehmen hinzufügen
    5. 'Unternehmen 1
    6. If chkbUnternehmen1.Checked Then
    7. Looping(arlBetriebe, 1, 1)
    8. End If
    9. 'Unternehmen 2
    10. If chkbUnternehmen2.Checked Then
    11. Looping(arlBetriebe, 2, 1)
    12. End If
    13. 'Unternehmen 3
    14. If chkbUnternehmen3.Checked Then
    15. Looping(arlBetriebe, 3, 1)
    16. End If
    17. ...
    18. End Sub
    19. Public Sub Looping(arl As ArrayList, Nummer As Integer, dimension As Integer)
    20. If arl.Count <> 0 Then
    21. For Each elem In arl
    22. arlQueryable.Add(elem)
    23. arlQueryable.Item(arlQueryable.Count - 1)(dimension) = CStr(Nummer)
    24. Next
    25. End If
    26. End Sub


    PROBLEM: Ich habe zu Testzwecken ein neues Projekt angelegt und diesen Abschnitt einzeln durchlaufen lassen. Es klappt!

    Im Projekt wo ichs eigentlich brauche klappt das Ganze NICHT. Der Inhalt sieht beim Debuggen dann so aus:

    VB.NET-Quellcode

    1. {"AbsabudgM1","3","1","","","","","",""},{"AbsabudgM1","3","1","","","","","",""},{"AbsabudgM1","3","1","","","","","",""}

    also an zweiter Stelle in JEDEM Array eine 3, statt 1,2 und 3.

    Beim schrittweisen Debuggen werden, soweit ich das überblicke, exakt die gleichen Schritte ausgeführt. An diesem Problem sitze ich schon mehrere Tage und habe keinerlei Lösungsansatz ;( ?( :wacko: .

    Was könnte ich noch tun?

    mfG
    Als allererstes würde ich dir dringend empfehlen von diesen Array wegzukommen und dir eine eigene Klasse für die Daten zu schreiben, dann wird das ganze viel übersichtlicher. Und dann ersetzt du deine ArrayLists durch zwei List(Of <deine neue Klasse>), denn ArrayList ist ein veraltetes Relikt aus VB6 Zeiten und sollte nicht mehr verwendet werden.
    Du musst vor dem Add() mit New eine neue Instanz des Elements erzeugen bzw: Du musst eine Kopie der vorhandenen Instanz hinzufügen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Rod: Jup, glaube das war das Problem, DANKE. Habe es angepasst:

    VB.NET-Quellcode

    1. If arl.Count <> 0 Then
    2. For Each elem In arl
    3. Dim tempAr(9) As String
    4. Array.Copy(elem, tempAr, elem.Length - 1)
    5. arlQueryable.Add(tempAr)
    6. arlQueryable.Item(arlQueryable.Count - 1)(dimension) = CStr(Nummer)
    7. Next
    8. End If


    Aber wieso funzt es denn eigentlich wenn ich den Code separat laufen lasse? Hmm, echt seltsam ...

    @Artzentus: Danke ist eine Überlegung wert. Die ArrayList in eine List<of Strings> umzuwandeln dürfte recht schnell gehen.

    Jedoch das Ding mit der eigenen Klasse: gute Idee aber ich habe insgesamt 385 Checkboxen mit dem Checked-Event, wo die Arrays angelegt werden. Das Ganze umzuschreiben bedeutet einen enormen Aufwand. Das Projekt muss aber bald fertig werden ...