Eine Frage des Ablaufs bzw. der Handhabung

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Drahuverar.

    Eine Frage des Ablaufs bzw. der Handhabung

    Hey Leute,
    ist schon ein Weilchen her, dass ich mich hier gemeldet habe...
    Bräuchte bei einem Projekt eine kleinen Hinweis bzw. eure Hilfe, da ich befürchte etwas Falsch zu machen bzw. den Wald vor lauter Bäume nicht mehr sehe. :whistling:

    Momentan füttere ich zwei Anwendungen mit Informationen aus einer Datenbank (nicht meine eigene Datenbank, ERP System), diese beiden Anwendungen sind wie folgt aufgeteilt:
    1. Freigabe
    2. Bearbeitung
    Die Anwendung Freigabe zeigt dem Anwender bestimmte Daten an die Freizugeben sind, diese Informationen wandern in eine Datenbank (meine eigene) und anschließend in die Anwendung Bearbeitung. Zusätzlich erhält aber die Anwendung Bearbeitung Informationen aus der ERP-Datenbank. Heißt also, dass ich zuerst die Informationen aus dem ERP-System beziehe und anschließend überprüfe, ob die jeweiligen IDs freigegeben sind oder nicht. Hier beginnt mein Problem. Irgendwie baue ich wohl beim löschen der überflüssigen Zeilen Mist.

    Wenn ich Debugge sehe ich, dass meine Bedingung erfüllt wird und dem entsprechend füttere ich eine kleine List (Of Integer).

    Hier mal etwas vereinfacht dargestellt wie der Ablauf momentan ist:

    VB.NET-Quellcode

    1. Dim lst_Rows As New List(Of Integer)
    2. For i = 0 To DataGridView1.Rows.Count - 1
    3. Dim sBedingung = DataGridView1.Rows(i).Cells("Bedingung").Value.ToString()
    4. 'SQL Abfrage, ob die jeweilige Position einen Termin in der Datenbank hinterlegt hat
    5. If ist_terminiert(sBedingung) Then
    6. lst_Rows.Add(i) 'zu speichernde RowIndex
    7. End If
    8. Next
    9. 'Von unten durcharbeiten und jeweilige Positionen/Zeilen entfernen
    10. For i = DataGridView1.Rows.Count - 1 To 0 Step -1
    11. If lst_Rows.Contains(i) Then
    12. DataGridView1.Rows.RemoveAt(i)
    13. End If
    14. Next


    Thereotisch müsste der Fehler wohl bei dem RemoveAt() liegen, allerdings wüsste ich nicht genau wo,... Iteriere ich falsch?

    Vielen Dank für eure Zeit,
    Drahuverar
    Option Strict On!
    RemoveAt löscht aus der Liste den Eintrag an Position xy, völlig unabhängig davon was nun in der Liste ist.
    Da du eine Bedingung hast, kann es durchaus vorkommen, dass Einträge im DGV einen andere Position haben.

    Kurz gesagt, du brauchst Remove, nicht RemoveAt

    Edit : @Drahuverar vergiss meinen Post, ich hab mich verlesen X/

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EaranMaleasi“ ()

    Hi also erstmal dein Schleifenproblem.
    Du kannst ja deine Integer List rückwärts durchlaufen und dann einfach ein RemoveAt im DGV (und nicht alle DGV Rows, ist ja unnötig) für jedes ListItem durchführen.
    Was ist denn der exakte Fehler? Werden nicht alle gelöscht?

    Aber ich sehe auch ein generelles Designproblem..
    Ist das DGV denn gebunden?
    Denn eigentlich haut man die Zeilen aus der Datasource des DGVs raus und nicht aus den DGV Rows selber.

    Ich würde generell vermeiden die Daten iwie aus den DGV Zellen zu holen usw. Erstell dir eine vernünftige Datasource und binde das DGV daran. Datenbearbeitung kannst du dann in deinen Klassen umsetzen und das Binding kümmert sich um die Anzeige.

    LG
    Das ist meine Signatur und sie wird wunderbar sein!
    @EaranMaleasi
    Okay, müsste ich also etwas umbauen, um .Remove() nutzen zu können. Dachte .RemoveAt() ist das sinnvollste, weil ich ja weiß welche Zeile ich entfernen möchte. Okay ;)

    @Mono

    Mono schrieb:

    deine Integer List rückwärts durchlaufen

    So festgefahren hab ich mich, dass ich das nicht in Erwägung gezogen habe.. :S

    Ich gebe dir Recht, aber leider geht es nicht anders momentan, zumindest habe ich das Gefühl.
    Momentan binde die DGV immer wieder neu, damit sie Aktuell ist (ERP-System -> DGV -> Infos aus meiner Datenbank -> Abgleich -> DGV "aktualisieren"). Der Anwender wählt Positionen aus, diese werden bearbeitet und aus dem ERP-System ausgebucht-> DGV wird neu gebindet. Halbautomatisch sozusagen. Wüsste sonst nicht, wie ich das sonst machen könnte, da ich nicht in das ERP-System schreiben kann... Das ist alles ein Wirr-Warr.
    "Was ist denn der exakte Fehler? Werden nicht alle gelöscht?" - sorry, vergessen zu beantworten. Also ich bin eben hingegangen und hab mir die jeweiligen Zeilen markiert (Rot) und habe dann die Datensätze abgeglichen, je weiter ich nach oben gekommen bin umso Fehlerhafter wurde es...
    Option Strict On!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Drahuverar“ ()

    Wenn du ein Binding hast dann hast du ja auch irgendwelche Daten die gebunden sind.
    Ich versteh dein Problem nicht mit dem ERP System und dem Binding nicht wirklich.
    Das ist meine Signatur und sie wird wunderbar sein!
    @Mono
    Lag daran, dass die Informationen die ich erhalten habe fehlerhaft waren. Bei mir hat alles gestimmt, aber im System waren Fehler die nun aufgedeckt worden sind.

    Trotzdem vielen Dank, ein paar ms hab ich gespart durch die eine iteration ;)
    Option Strict On!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Drahuverar“ ()