Hallo zusammen,
ich habe ein Programm geschrieben, was ein DataGridView enthält, welches Daten aus einer Datenbank mittels ADO anzeigt.
Jede Zeile im DGV hat eine Priorität, nahc der die Anzeige sortiert wird (Jede Prio kommt nur ein mal vor).
Nun möchte ich mittels zweier Buttons die Priorität der Zeile ändern (um 1 erhöhen oder verringern) und die Prio der darüber oder darunterliegenden Zeile somit auch anpassen, sodass jede Prio immer noch nur 1 mal vor kommt.
Abschließend soll dann die Anzeige aktualisiert werden (Priorität aktualisiert und neu sortiert) und der Fokus weiterhin auf der ausgewählten Zeile (mit neuer Prio) liegen. Mit Hilfe eines 3. Button wird dann zurück in die DB geschrieben.
Funktioniert auch fast alles einwandfrei. Nur die Zeilen mit den Prioritäten 9 und 10 machen mir zu Beginn Probleme. Beim erstmaligen erhöhen der Prio von 10 auf 9 wird die Spalte Prio (bei Datensatz 1 von 10 auf 9 und bei Datensatz 2 von 9 auf 10) angepasst, allerdings wird das DGV scheinbar nicht aktualisiert. Die Zeilen bleiben in der vorherigen Reihenfolge stehen und es erfolgt keine Neusortierung. Somit steht dann folgende Reihenfolge: 7,8,10,9,11,12.
Dieser Fehler tritt nur beim 1. Mal auf und nur bei den Prios 9 und 10.
Sofern ich mit der Maus auf das DGV klicke wird neu sortiert und alles ist richtig. Allerdings reicht mir dies nicht aus.
Ich habe bereits mittels Debugger den Code überprüft, allerdings erscheint keine Fehlermeldung. Zudem tritt der Fehler nur unregelmäßig auf.
Jemand eine Idee, was ich falsch/schlecht gemacht habe und wo überhaupt das Problem liegt?
(bs ist die BindingSource)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| private void btnPrioHoch_Click(object sender, EventArgs e) { try { int focus = grdDaten.CurrentCell.RowIndex; int ausgewaelter = Convert.ToInt16(grdDaten.CurrentCell.RowIndex); int darueber = Convert.ToInt16(grdDaten.CurrentCell.RowIndex) - 1; int ausgewaehltrow = ausgewaelter; int darueberrow = darueber; if (Convert.ToInt16(grdDaten.CurrentCell.RowIndex) > 0) { this.grdDaten.Rows[ausgewaehltrow].Cells[0].Value = darueber; this.grdDaten.Rows[darueberrow].Cells[0].Value = ausgewaelter; focus--; bs.Position = focus;
} else { MessageBox.Show("Höchste Prio erreicht"); }
bs.Sort = "AuPrio ASC";
} catch (Exception ex) { MessageBox.Show("Fehler: " + ex); } } |
Ich habe bereits versucht mit grdDaten.Sort etwas zu erreichen. Ist allerdings auch fehlgeschlagen ....
Gruss
Moderiert von Christian S.: C#-Tags hinzugefügt