Entwickler-Ecke
WinForms - Anzeige DataGridView über DataSource aktualisieren
DonC - Do 18.12.08 23:39
Titel: Anzeige DataGridView über DataSource aktualisieren
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 - Fr 19.12.08 00:33
Titel: Re: Anzeige DataGridView über DataSource aktualisieren
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?
http://msdn.microsoft.com/de-de/library/system.data.dataview(VS.80).aspx
raiguen - Fr 19.12.08 01:19
Titel: Re: Anzeige DataGridView über DataSource aktualisieren
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 - 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 - 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 - 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 - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!