Autor |
Beitrag |
DonC
Hält's aus hier
Beiträge: 14
|
Verfasst: Do 18.12.08 23:39
Hi Leutz,
folgendes Problem: Ich habe zwei TabPages und in einer der TabPages wird ein DataGridView angezeigt. Das DataGridView hat als DataSource eine DataTable. Dieser DataTable werden zur Laufzeit meines Programms öfters Zeilen hinzugefügt, geändert und entfernt.
Ich habe nun das Problem, dass wenn der DataTable neue Zeilen hinzugefügt oder entfernt werden, die Anzeige der Zeilen im DataGridView nicht sofort aktualisiert wird. Erst wenn ich die andere (leere) TabPage anklicke und danach wieder die TabPage öffne, in der das DataGridView angezeigt wird, werden auch die aktuellen Daten der DataTable korrekt im DataGridView angezeigt. Mir scheint so, als ob das DataGridView nicht immer sofort neu gezeichnet wird. Gibt es eine Möglichkeit, die Anzeige des DataGridViews manuell zu refreshen, wenn eine Änderung in der DataSource erfolgt ist?
Gruß,
Chris
|
|
Nally
      
Beiträge: 46
|
Verfasst: Fr 19.12.08 00:33
DonC hat folgendes geschrieben : | Hi Leutz,
folgendes Problem: Ich habe zwei TabPages und in einer der TabPages wird ein DataGridView angezeigt. Das DataGridView hat als DataSource eine DataTable. Dieser DataTable werden zur Laufzeit meines Programms öfters Zeilen hinzugefügt, geändert und entfernt.
Ich habe nun das Problem, dass wenn der DataTable neue Zeilen hinzugefügt oder entfernt werden, die Anzeige der Zeilen im DataGridView nicht sofort aktualisiert wird. Erst wenn ich die andere (leere) TabPage anklicke und danach wieder die TabPage öffne, in der das DataGridView angezeigt wird, werden auch die aktuellen Daten der DataTable korrekt im DataGridView angezeigt. Mir scheint so, als ob das DataGridView nicht immer sofort neu gezeichnet wird. Gibt es eine Möglichkeit, die Anzeige des DataGridViews manuell zu refreshen, wenn eine Änderung in der DataSource erfolgt ist?
Gruß,
Chris |
setzt du deine DataTable mit einer DataView um?
msdn.microsoft.com/d...dataview(VS.80).aspx
|
|
raiguen
      
Beiträge: 374
WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
|
Verfasst: Fr 19.12.08 01:19
Moin
Also, wenn eine DataTable DIRKET als DataSource an ein DataGridView angestöpselt ist, dann werden Änderungen in der DataTabele leider nicht ans DGV weitergereicht (ob das ein Bug ist oder ein Feature lass ich mal dahingestellt sein  ).
Wenn du allerdings zwischen der DataTable und dem DGV eine BindinghSource schaltest, dann werden Änderungen an der zugrundeliegenden Datenquelle (=DataTable) an das DGV weitergereicht...
Werden bei Dir mit dem Tabpage-Wechsle irgendwelche 'refresh'-Aktionen oder komplettes Neufüllen der DataTable durchgeführt, die die von dir erwähnten Aktualisierungen anzeigen?
Gruss Rainer
|
|
DonC 
Hält's aus hier
Beiträge: 14
|
Verfasst: Fr 19.12.08 14:43
Hoi,
also beim Tab-Wechsel werden keinerlei Refresh-Aktionen durchgeführt. Ich habe jetzt einfach mal eine Binding-Source dazwischengeschaltet, aber nun passiert garnix mehr, d.h. jetzt werden im DGV überhaupt keine Daten mehr angezeigt. Ich habe die BindingSource folgendermaßen dazwischengeschaltet:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| DataGridView dgv1 = new DataGridView(); DataTable table1 = new DataTable();
BindingSource s1 = new BindungSource(); s1.DataSource = table1;
dgv1.DataSource = s1; |
Wie gesagt, jetzt wird im DGV garnix mehr angezeigt. Mache ich irgendwas falsch?
Greetings,
Chris
|
|
raiguen
      
Beiträge: 374
WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
|
Verfasst: Fr 19.12.08 19:52
Moin
okay, das Ganze ist in der Tat etwas ungewöhnlich kompliziert (um nicht zu sagen: unlogisch...), aber wenn eine BindingSource verwendet wird, dann MUSS alles über diese 'gesteuert' werden:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| DataGridView dgv1 = new DataGridView(); DataTable table1 = new DataTable();
BindingSource bindingSource1 = new BindungSource(); bindingSource1.DataSource = table1;
dgv1.DataSource = bindingSource1;
bindingSource1.AddNew(); DataRowView row = (DataRowView)bindingSource1.Current;
row["..."] = "blabla"; row["..."] = "blubb";
bindingSource1.EndEdit(); |
|
|
DonC 
Hält's aus hier
Beiträge: 14
|
Verfasst: Sa 20.12.08 00:11
Hi,
besten Dankf für das obige Beispiel
Aber eine Frage habe ich noch: Wie mache ich es, wenn ich eine bereits existierende Zeile updaten möchte? Daher, wie kann ich die bereits existierenden Zeilen in der BindingSource durchlaufen und deren Werte ändern?
|
|
JüTho
      
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
|
Verfasst: Sa 20.12.08 12:22
Hallo,
wie Du von einem Element der BindingSource zu einer Datenzeile kommst, hat Dir raiguen schon gezeigt. Das kannst Du auf Current oder auf alle Elemente anwenden:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| foreach(object item in bindingSource1.Items) { DataRowView row = (DataRowView)item; row.BeginEdit();
row["..."] = "blabla"; row["..."] = "blubb";
row.EndEdit(); bindingSource1.EndEdit(); } |
Gruß Jürgen
|
|
|