Laden...

Bindingsource zu langsam?!

Erstellt von prakti08 vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.056 Views
P
prakti08 Themenstarter:in
321 Beiträge seit 2008
vor 13 Jahren
Bindingsource zu langsam?!

Hallo,
in meinem Projekt habe ich ein Dataset mit mehreren Tabellen.
Die zwei Haupttabellen sind miteinander verknüpft über Nested Relation.
Sagen wir mal Kategorie und Produkte.

Kategorie ist an eine Combobox gebunden und Produkte an eine Datagridview.
Wenn ich nun in der Combobox ein anderes Item auswähle werden die Daten des Datagridview geändert, passend zur ausgewählten Kategorie.
Das geschieht alles ohne das ich eine Zeile Code geschrieben habe.

Allerdings brauche ich verschiedene Filter um die anzeige anzupassen.
Fast für jede Spalte gibts einen eigenen Filter.
Wenn ich jetzt das selectedItem der Combobox ändere, während die Bindingsource gefiltert ist, wird eine leere Datagridview aufgebaut, für jede Zelle erhalte ich einen Dataerror, dann wird die leere Datagridview nochmal gelöscht und es erscheint die passende ansicht.

Liegt das an den Filtern? Machen sie das Laden der Bindingsource so langsam das noch keine Daten vorhanden sind wenn die DataGridView drauf zugreifen will oder woran könnte das liegen?

der filter für die Bindingsource sieht zb. so aus:
(Language = 'DE')AND ((TITLE like '%adfa%') OR (CONTENT like '%adfa%'))AND (DATE_CHANGED ≤ DATE_PUBLISHED)

im moment umgehe ich das problem unschön, indem ich im event der ComboBox SelectedIndexChanged (dieses wird aufgerufen bevor die ansichten bzw bindings geändert werden) einen Timer starte über 10 ms und wärend diesem Zeitraum die Datagridview ohne Binding anzeige. danach setze ich das Binding wieder auf DataSource.

Kann mir einer sagen welche events und methoden ich nutzen kann um den timer zu umgehen?

Use the source, Luke!

Nur, weil man vor sich eine CPU hat, muß man das Denken nicht
einstellen.

771 Beiträge seit 2009
vor 13 Jahren

Hast du denn mal einen einfachen Filter verwendet (ohne OR und LIKE)? Und wieviele Datensätze sind denn in der ungefilterten Tabelle?

M.E. könnten es aber auch zwei oder mehrere Events sein, die sich in die Quere kommen.
Hast du denn mal die DataErrors dir genauer angeschaut (DataGridViewDataErrorEventArgs.Exception)?

P
prakti08 Themenstarter:in
321 Beiträge seit 2008
vor 13 Jahren

die datensätze halten sich in grenzen.
es müssten um die 1000 sein. das ist ja nicht allzuviel.
wenn ich einfache filter anwende dann funktioniert das ganze (denke ich, habe erst heute mittag wieder zugriff auf das programm). allerdings arbeite ich mit den gefilterten daten in meinem programm weiter, weil ich auch methoden habe die auf jeden datensatz die dem filter entsprechen zugreifen..

System.IndexOutOfRangeException: Der Index 0 hat keinen Wert.
bei System.Windows.Forms.CurrencyManager.get_Item(Int32 index)
bei System.Windows.Forms.DataGridView.DataGridViewDataConnection.GetError(Int32 rowIndex)

Use the source, Luke!

Nur, weil man vor sich eine CPU hat, muß man das Denken nicht
einstellen.

P
prakti08 Themenstarter:in
321 Beiträge seit 2008
vor 13 Jahren

ich habe jetzt die filter mal einzeln durchprobiert.
der fehler tritt vor allem bei Visibility = Visible_CheckBox.Checked.ToString()
also dieser filter alleine reicht um den fehler zu verursachen..
allerdings ist das auch der wichtigste filter den ich habe...

Use the source, Luke!

Nur, weil man vor sich eine CPU hat, muß man das Denken nicht
einstellen.

P
prakti08 Themenstarter:in
321 Beiträge seit 2008
vor 13 Jahren

so.. ich habe eine zweite unschöne lösung gefunden.
im SelectedIndexChanged event der ComboBox lösche ich die DataSource der DataGridView.
im ListChanged event der Bindingsource lege ich im 2. durchlauf (wir immer 2 mal durchlaufen) die Datasource der DataGridView wieder neu fest.

Diese Lösung funktioniert auch ohne timer 😃
allerdings gefällt sie mir immernoch nicht.
Hatte hier noch keiner so einen Fall?
Wäre für jede Hilfe dankbar!

Was ich am seltsamsten finde ist, das nur die DataGridView solche Zicken macht, alle anderen elemente die an diese BindingSource gebunden sind verhalten sich normal!

Ist es möglich das so ein Fehler nur im Debug mode des Visual Studios auftaucht, aber nicht wenn man die normale .exe startet?

Use the source, Luke!

Nur, weil man vor sich eine CPU hat, muß man das Denken nicht
einstellen.