Warum Programmabbruch?

Arndtinho

Erfahrenes Mitglied
Hallo,

in meiner Anwendung kann der User eine Suchanfrage an eine DB stellen. Er bekommt, entsprechend des Suchtextes, alle möglichen Ergebnisse geliefert und in einem DataGrid angezeigt. Nun kann er in diesem Grid seinen gewünschten Datensatz anklicken. Jetzt erfolgt eine erneute Abfrage der DB um alle Daten des gewünschten Datensatzes abzufragen. Diese sollen dann auf verschiedenen Label dargestellt werden. Nachdem die Suchabfrage mit dem gewünschten Datansatz aus dem Grid an die DB geschickt wurde, kann ich die Daten darstellen. Stellt der User nun fest, es war doch nicht der richtige und klickt auf einen zweiten Namen des Grids kommt die Fehlermeldung

"Eine nicht behandelte Ausnahme des Typs 'System.ArgumentException' ist in system.windows.forms.dll aufgetreten. Zusätzliche Informationen: Dies verursacht, dass sich zwei Bindungen der Auflistung an dieselbe Eigenschaft binden."

und das Programm bricht ab. Habe versucht dies mit DataSet.Clear() abzufangen, aber ohne Erfolg. Was mache ich falsch?


Gruß Arndtinho
 
Hi Was du Falsch machst kann ich dir nicht sagen aber versuch es mal mit try und catch !

try
{
// Code zur Datenbankarbeit
}
catch(Exception error)
{
MessageBox.Show(error.Message.ToString());
}

In der MessageBox stehen meistens genauere Angaben über die Fehlerursache !

Musst du mal probieren

DarkGreetinx LordDeath
 
Re:

Hallo,

Danke.
Habe das gleich mal umgesetzt und bekomme folgendes:

"Dies verursacht, dass sich zwei Bindungen der Auflistung an dieselbe Eigenschaft binden. Parametername: binding"

Leider kann ich damit im Moment nichts anfangen. Hast Du ne Idee?


Gruß Arnditnho
 
Nee so wirklich nicht aber kann es sein das du zwei Datenbankwerte in das gleiche Feld schreiben willst ?

DarkGreetinx LordDeath
 
Re:

Mhh, die Label fülle ich so:

adapt.Fill(dsKunde, "KundenSuche");
lblInfKNr.DataBindings.Add("Text", dsKunde.Tables["KundenSuche"], "KundNr");
lblInfName.DataBindings.Add("Text", dsKunde.Tables["KundenSuche"], "Name");
lblInfTel.DataBindings.Add("Text", dsKunde.Tables["KundenSuche"], "Tel");

usw.

Ich nehme an, dass Problem bzw. die Ursache für das Problem ist folgendes:
Wenn der User merkt, er hat den falschen Kunden im Grid angeklickt, dann auf einen weiteren klickt, dass es da beim Binden der Label zum Konflikt kommt, weil diese ja noch an die Daten des vorhergehenden Datensatzes "gebunden" sind.
Ich habe versucht dies abzufangen, indem ich das DataSet leere bzw. lösche, aber das hatte zur Folge, dass ich gar keine Daten mehr angezeigt bekomme.

adapt.Fill(dsKunde, "KundenSuche");
lblInfKNr.DataBindings.Add("Text", dsKunde.Tables["KundenSuche"], "KundNr");
...
dsKunde.Clear();

Hast Du eine Idee wie man sowas lösen kann?


Gruß Arndtinho
 
Was passiert wenn du

dsKunde.Clear();

Vor der befüllung der Werte machst

Weil du füllst deine Labels

adapt.Fill(dsKunde, "KundenSuche");
...

und dann leerst du deine Daten und er greift bei der anzeige eigentlich auf adapt zu und wenn du ihn leerst kann er nichts mehr anzeigen !

DarkGreetinx LordDeath
 
Re: Re:

Original geschrieben von Arndtinho
Mhh, die Label fülle ich so:

adapt.Fill(dsKunde, "KundenSuche");
lblInfKNr.DataBindings.Add("Text", dsKunde.Tables["KundenSuche"], "KundNr");
lblInfName.DataBindings.Add("Text", dsKunde.Tables["KundenSuche"], "Name");
lblInfTel.DataBindings.Add("Text", dsKunde.Tables["KundenSuche"], "Tel");

usw.

Machst du vor du die DataBindings setzt ein Clear darauf?

lbllnfKNr.DataBindings.Clear();
lbllnfName.DataBindings.Clear();
lbllnfTel.DataBindings.Clear();


usw...

Sonst kann es zu Konflikten kommen.

Gruß Swebble
 
Re:

Hallo,

danke so funktioniert es.
Dieser (von mir gewählte) Weg scheint mir aber ein wenig umständlich zu sein. Kann man sowas auch noch eleganter lösen?

Gruß Arndtinho
 
Ist eigentlich ok der Weg würde ich sagen.
Ist sogar so gut, dass ich in meinem Projekt ebenfalls mit den DataBindings arbeite ;)
 
Re:

Naja, ich dachte man könnte eventuell die zweite DB-Abfrage umgehen, weil ja die Daten (im Moment ein Teil) schonmal vorher in einem DataSet vorhanden sind.

Gruß Arndtinho
 

Neue Beiträge

Zurück