Laden...

DataGridView: DataSource richtig austauschen?

Erstellt von ho70 vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.281 Views
H
ho70 Themenstarter:in
20 Beiträge seit 2006
vor 16 Jahren
DataGridView: DataSource richtig austauschen?

Hallo,

ich habe folgendes Problem:
Ich habe eine WinForms-Klasse mit einem DataGridView (speziell dieses), welchem ich per die Daten, die ich als DataSet vom (eigenem Remoting-) Server hole zuweise. Dieses DataSet enthält mehrere DataTables, jede DataTable hat als PrimaryKey eine ID-Spalte.


myDataSet = Server.GetData("irgendwas");
// Zuweisung des DataSource mittels:
grid.DataSource = ds.Tables[m_sTableName].DefaultView;  
// oder auch
BindingsSource myBindingsSource = new BindingSource(myDataSet, myTableName);
myGrid.EmbeddedDataGridView.DataSource = myBindingsSource;

Nun möchte ich den DataSource "austauschen": Es soll also nicht mehr Tabelle1 sondern Tabelle2 angezeigt werden, welche ich durch eine neue Anfrage an den Server erhalte.
Wenn ich nun wieder Daten geholt habe, und diese in mein myDataSet als neue Tabelle einfüge, diese dann als DataSource den Grid zuweise zeigt es die Daten korrekt an. Dummerweise soll mittels Doppelclick auf eine Zeile dann ein weiteres Formular geöffnet werden, wobei ich den Datensatz ain der obigen ID-Spalte erkennen kann, also z.B. grid.SelectedRows.Cells["id"]. Dieses Formular wird aber genau soviele Male erzeugt, wie ich dem DataGridView vorher den DataSource zugewiesen habe.

Nun aber endlich meine Frage:
Wo merkt sich der/das DataGridView die Anzahl den DataSource-Zuweisungen, bzw. wie kann ich das umgehen?
Das Unterformular soll aber trotzdem mehrmals für unterschiedliche IDs per DoppelClick zu öffnen sein.

Gruß Henning

432 Beiträge seit 2005
vor 16 Jahren

hi henning,

Wo merkt sich der/das DataGridView die Anzahl den DataSource-Zuweisungen, bzw. wie kann ich das umgehen?

Das DatagridView merkt sich gar nichts - du musst nichts umgehen.

Welchen Formulartyp Du öffnest, hängt von der BindingSource (also: Name der Tabelle) ab.

Ob der Doppelklick in die Row dann jedesmal eine neue Instanz des passenden Forms öffnet, kannst du ja durch den Gültigkeitsbereich der Variable steuern bzw. indem du die BindingSource der Tabelle an das Formular weiterreichst - das Property myBindingSource.Current ist automatisch das, was deine Form-Controls mit Daten "füttert"

hth
ron

H
ho70 Themenstarter:in
20 Beiträge seit 2006
vor 16 Jahren

Hallo citizen.ron,

Danke für die Antwort.

Ich habe das Öffnen des neuen Formular beim DoppenClick jetzt zum Testen gegen das Anzeigen einer MessageBox ersetzt, welche nur die Datensatz-ID anzeigt. Diese MessageBox wird auch genau soviele Male angezeigt, wie die DataSource-Eigenschaft gesetzt wird. Dabei sind der BindingSource bzw. das DataSet (jenachdem welche Variante ich versucht habe) Eigenschaften des ursprünglichen Formulars.

Gruß Henning

H
ho70 Themenstarter:in
20 Beiträge seit 2006
vor 16 Jahren

Nach weiterem Suchen (und Probieren) habe ich das Problem gefunden:
Ich habe den "DataGridViewCellEventHandler für CellDoubleClick" mehrfach zugewiesen.
Nämlich immer dann, wenn der DataSource neu zugewiesen wurde (, weil ich im DataSet eine weitere Tabelle habe, welche die Formatierungsinformationen für das Grid enthält und ich die gesamte Formatierung nach dem Ändern des DataSources neu gesetzt habe.)
Daraus ergibt sich eine neue Frage:
Kann man irgendwie abfragen, ob ein EventHandler gesetzt wurde?

Gruß Henning

432 Beiträge seit 2005
vor 16 Jahren

hi henning,

Kann man irgendwie abfragen, ob ein EventHandler gesetzt wurde?


// Zuweisung
   lil.LinkClicked += new LinkLabelLinkClickedEventHandler(eventHandler);
...
// Zuweisung prüfen:
   if (LinkClicked != null) LinkClicked();

// und was es auch noch gibt:
   EventHandler handler = (EventHandler)Events[meinEvent];
   if (handler != null)
      handler(this, e);


hth,
ron