Hallo, ich schreibe gerade eine WindowsForms-Anwendung mit MS Visual Basic 2008 Express. Das Programm bekommt Werte von einem Com-Port und schreibt Sie in eine DataTable, die an ein DataGridView gebunden ist. Soweit so gut. Trifft ein Datensatz ein, werden die Werte nach eintreffen des letztes Bytes korrekt in eine neue Zeile der DataTable geschrieben. Im GridView werden die neuen Zellen aber erst sichtbar, wenn die Daten im GridView über einen Klick auf einen ColumnHeader neu sortiert werden. Außerdem werden Zellen dargestellt, die sich außerhalb des sichtbaren Bereiches befanden und durch verschieben des ScrollBar (wieder) sichtbar werden. Wenn die Routine, welche die neue Zeile erstellt, nicht durch das letzte Datenbyte ausgelöst wird, sondern manuell durch einen Button, dann funktioniert alles einwandfrei. Beide Varianten führen exakt den gleichen Code aus. Hier mal ein paar Code-Teile: Dim values As New DataTable values.Columns.Add("Spalte1") values.Columns.Add("Spalte2") ... values.Columns.Add("LetzteSpalte") DataGridView.DataSource = values values.Rows.Add(New Object() {CStr(Wert1), _ CStr(Wert2), _ ... CStr(LetzterWert)}) Die Methoden Refresh und Update haben keine Wirkung. Früher hab ich mal mit Borland Delphi programmiert. Dort gab es Methoden wie Repaint oder Redraw. Ich denke sowas könnte helfen, ich habe aber nichts dergleichen in vb.net gefunden. Hoffe hier kann mir jemand helfen. Habe bereits unzählige Beiträge in diversen foren gelesen, die mir aber nicht weiter geholfen haben. MfG, Enrico
http://www.vb-fun.de/cgi-bin/loadframe.pl?ID=vb/startseite.shtml Vielleicht hilft es, oder dir ist es bekannt?
Ich denke schau mal unter den Funktionen mit DBGrid.Refresh nach. Den Cursor bewegt man im Grid-Feld mit .Move Last bis zum letzen Datensatz hin. Bzw. .Move End.
bei vb-fun bin ich nicht fündig geworden. wo sind denn diese .move-anweisungen zu finden? habe das problem vorerst mit DataGridView.Invalidate() Me.ValidateChildren() gelöst. scheint mir aber für mein kleines problem eine ziemlich pompöse lösung zu sein.
Also die Ursache für das Problem war, dass die Bearbeitung der zugrundeliegenden DataTable und damit wohl auch die Aktualisierung des DataGridView nicht in dem Thread erfolgte, der das DataGrifView erstellt hat.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.