Autor Beitrag
lightsaver
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24


C# (VS 2008 Prof.)
BeitragVerfasst: Di 08.04.08 13:20 
Hi,

ich habe mal wieder ein Problem mit dem dgv :(
Also, das dgv ist mit einem Dataset verbunden. Ich habe ein form mit dem dgv. Nun füge ich über ein seperates form die Daten in das Dataset und bekomme diese im dgv angezeigt.

Klicke ich nun in das dgv und gehe mit den Pfeiltasten einfach mal die Zeilen hoch und runter, so wird aus mir unerfindlichen Gründen nach der letzten Zeile sowas wie ein Platzhalter für eine neue Zeile eingefügt. Also wirklich nur der Platz mit der Hintergrundfarbe vom dgv, mehr nicht. Ändere ich nun die Reihenfolge der einzelnen Zeilen (welche ist dabei vollkommen egal), dann wird in diesem "Platzhalter" plötzlich die letzte Zeile nochmal angezeigt und ist auch nicht mehr wegzubekommen. Ich kann diese Zeile weder anklicken, markieren...
Laut Debugger dürfte es diese Zeile auch gar nicht geben, da der rowcount genau die richtige Anzahl ohne diese Zeile angibt, und das sowohl im dgv als auch im dataset. Diese Zeile kann auch gar nicht doppelt vorkommen, da die erste Spalte der Primarykey ist und somit auch gar nicht doppelt vorkommen könnte.
Diese Zeile ändert sich auch nicht mehr, also auch wenn ich die letzte Zeile dann in der Reihenfolge weiter nach oben schiebe.
Verschwinden tut die Zeile erst, wenn ich irgend eine Zeile lösche. Allerdings geht das Spiel dann wieder von vorne los mit dem Platzhalter und dann wieder mit der Zeile.

Ich habe schon probiert, ob dgv.refresh() etwas bringt, tut es aber nicht.

Nachdem ich schon bei meinen anderen Problemen keine Reaktion bekommen habe, hoffe ich, dass hier vielleicht jemand irgendwelche Vorschläge hat, die ich testen könnte.

Gibt es eigentlich die Möglichkeit, nur das dgv leer zu machen und dann einfach die Daten darin neu vom dataset zu holen? Bisher ist mir nichts passendes dazu eingefallen, weil einfach mal die Einträge im dgv löschen geht natürlich nicht, da die dann ja auch im dataset entfernt werden.
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Di 08.04.08 17:26 
Steht AllowUserToAddRows auf false? Jürgen
lightsaver Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24


C# (VS 2008 Prof.)
BeitragVerfasst: Mi 09.04.08 13:11 
Ja, AllowUserToAddRows ist auf false.

Ich habe einfach mal ein paar Screenshots (vom betroffenen Bereich) angehängt, um das ganze deutlicher zu machen

1)
Nach dem Hinzufügen sieht das ganze noch so aus, wie es gewollt ist (das dgv ist ganau so hoch, wie nötig, um alle Zeilen anzuzeigen):
user defined image

2)
Wenn ich dann mit den Pfeiltasten die Markierung bis zur letzten Zeile gehe, dann kommt aber unerwarteter Weise der freie Platz (dies bleibt auch so lange so, bis ich die Reihenfolge der Einträge ändere. Hoch und runtergehen mit der Markierung macht hier keine Änderungen):
user defined image

3)
So sieht das dann z.b. aus, wenn ich Zeile 3 um eins nach oben schiebe. Plötzlich gibt es Zeile 4 doppelt. Die letzte existiert dabei aber eigentlich gar nicht und ist auch nicht auswählbar. Die Markierung geht nur so weit runter, wie im Screen zu sehen ist:
user defined image

Und dann gibt es manchmal noch folgendes Durcheinander:
user defined image
Hierbei geht das dgv eigentlich nur bis zum Ende der oberen Markierung. Der unmarkierte und der untere markierte Bereich sind ebenfalls wieder "Datenmüll" der gar nicht da sein dürfte
lightsaver Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24


C# (VS 2008 Prof.)
BeitragVerfasst: Mi 09.04.08 15:42 
so, ich habe durch zufall bei google doch noch jemanden gefunden, der das gleiche problem hatte und konnte es lösen.

falls jemand mal das gleiche problem haben sollte hier nochmal die lösung:

1. das problem kommt daher, dass ich das dgv von der größe her anpasse, und zwar mit höhe = dataGridView1.Rows.GetRowsHeight(DataGridViewElementStates.Visible) + dataGridView1.ColumnHeadersHeight;
es fehlen noch ein paar pixel für das control selber.

2. lösung: einfach zu der berechneten höhe noch +3 und es funktioniert