Hallo Community,
in meinem Projekt wurde über den Assistenten eine Datenquelle (SQL-DB) eingefügt. Dieser hat auch direkt ein DataSet und einen DataAdapter mit allen Tabellen angelegt. Das DataSet habe ich per DataSource an ein DataGridView gebunden, woraufhin eine BindingSource angelegt wurde, was wohl jetzt diese Struktur hat:
DataAdapter -> DataSet -> BindingSource -> DataGridView.DataSource
Anfangs war ich etwas verwirrt von den vielen Objekten die angelegt wurden.
Im ersten Schritt sollten Daten in die DB geschrieben werden. Dies realisierte ich, in dem ich DataAdapter.Insert(neuer Datensatz) ausführte und DataAdapter.Fill(DataSet) aufrief.
Der nächste Schritt sollte ein Editieren bestehender Datensätze werden. Dazu wollte ich also auf das DoubleClick-Event der Zelle des DataGridViews regieren und den Datensatz anzeigen.
Da ihr nun den Hintergrund kennt, stelle ich mein Problem da:
Um den Datensatz anzuzeigen benötige ich die Id des Datensatzes. Wie komme ich an diese Id? Ich könnte zwar die selektierte Spalte und Zeile des DataGridViews herausfinden und den Inhalt nehmen, was der Id entsprechen würde, aber ich finde das nicht sehr gut gelöst. Gibt es eine bessere Möglichkeit? Ich könnte mir vorstellen, dass man irgendwie direkt auf die ObjektId des DataSets zugreifen kann, stellt sich nur die Frage, ob das DataSet mitbekommt, dass gerade Zeile XY selektiert wurde und die entsprechende Id nimmt.
Hoffe ihr habt mich verstanden.
P.S.: Wusste leider nicht in welches Forum. Da es um eine DataSet / DataBinding geht und das eine Control ist, stelle ich es mal hier rein.
Gruß,
-acid.
Hallo -acid-,
P.S.: Wusste leider nicht in welches Forum. Da es um eine DataSet / DataBinding geht und das eine Control ist, stelle ich es mal hier rein.
Wir hatten gehofft, solche Unsicherheiten zu vermeiden, in dem wir 'Databinding' explizit in die Beschreibung dieses Forums aufgenommen haben.
herbivore
Ja das wusste ich, nur geht es ja auch wiederrum SQL, etc.. aber tut ja nichts zur Sache. Hab ich Glück gehabt, dass es im richtigen Forum gelandet ist 🙂
//EDIT: Hab ne Lösung:
Da ja das BindindSource an das DataGridView, bzw. umgekehrt, gebunden ist, wähle ich das Event Selection_Changed vom DataGridView und nutze es wie folgt:
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
this.bindingSource1.Position = this.dataGridView1.CurrentRow.Index;
}
Nun weiß ich bzw. die BindingSource, welches Element im DataGridView selektiert ist, was mir wiederrum die Möglichkeit gibt, auf folgendes Event zu reagieren bzw. es wie folgt zu nutzen:
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
DataRowView drv = (DataRowView)this.bindingSource1.Current;
MessageBox.Show(drv.Row["ObjectId"].ToString());
}
Damit habe ich also meine Id um weiter zu arbeiten. Thread gelöst. Machmal sieht man den Wald vor lauter Bäumen nicht. Vielleicht hilft es aber jemand Andrem, der ein ähnliches Problem hat.