| 

.NET C# Java Javascript Exception

2
Hi!

Ich habe eine DataGridView die an eine über DefaultView.RowFilter gefilterte DataTable gebunden ist.

Ich muss jetzt im Code nach einer Sortierungsspalte mit Integern sortieren und dann diesen wert ändern. Dies schaut derzeit so aus:

DataView dv = new DataView((DataTable)dgv.DataSource);
dv.RowFilter = sortColumn + "=" + i;
dv[0][sortColumn] = (int)dv[0][sortColumn] - 1;


das Problem ist die zugrunde liegende Table wird nicht aktualisiert. Wie stell ich das am Besten an?

mfg

TheJoe
28.07.2011
TheJoeIaut 173 1 6
4 Antworten
2
Hallo TheJoelaut,

bin mir nicht ganz sicher, aber mag damit zu tun haben, dass Deine View, die Du ja effektiv aus einem Databinding ((DataTable)dgv.DataSource) holst, noch ein EndEdit() Aufruf benötigt. bin mir nicht sicher, ob es reicht, das auf der View aufzurufen oder ob Du den BindingManager bemühen musst.

Ist aber auch egal, denn Du kannst Dir viel Arbeit ersparen und das Ganze wesentlich bequemer lösen, wenn Du einfach die BindingSource Komponente einsetzt. Die kapselt Dir diese ganzen Details weg und ist einfach zu bedienen. Eine Umstellung auf eine BindingSource dürfte problemslos ohne großen Aufwand machbar sein.

Viel Erfolg
Florian
28.07.2011
ffordermaier 8,4k 3 9
1
Wir verwenden .Net 4.0 wobei wir erst vor kurzem von 2.0 migriert sind. Warum es nicht geht kann ich mir eigentlich auch nicht erklären, wahrscheinlich hat es mit dem bereits geschriebenem Code zu tun. Auf jeden Fall habe ich jetzt doch noch eine Lösung gefunden, auch wenn diese nicht wirklich schön ist:

((DataRowView)dgv.Rows.DataBoundItem).Row[sortColumn]=i+1;
28.07.2011
TheJoeIaut 173 1 6
1
Hast du es schon einmal mit dgv.Refresh() oder dgv.Update() versucht?
28.07.2011
KN 1,7k 1 8
0
Danke für die die Antwort.

Ich habe es auch schon über eine DataRowView probiert die eben über die Methoden BeginEdit und EndEdit verfügt:

DataView dv = new DataView((DataTable)dgv.DataSource);
dv.RowFilter = sortColumn + "=" + i;
DataRowView drv = dv[0];
drv.BeginEdit();
drv.Row[sortColumn] = i + 1;
drv.EndEdit();


Dies führt leider auch nicht zum gewünschten Ergebnis.

Eine BindingSource dazwischen schalten funktioniert nicht ohne weiteres, da bereits sehr viel Code rund um dieses DGV geschrieben wurde und dies dann wahrscheinlich auch geändert werden müsste.
28.07.2011
TheJoeIaut 173 1 6
Ich hab das eben mal bei mir probiert, da funktioniert das. Welche .NET Version nutzt Du? Kannst Du evtl. deinen Beitrag editieren und mehr Code posten, so dass es ein vollständiges Beispiel wird?
ffordermaier 28.07.2011

Stelle deine Datagridview-Frage jetzt!