Hi@all 🙂
Hab da mal ne kleine aber nervige Frage die mich beschäftigt... und zwar:
Ich habe eine Form "Übersicht" in der sich ein DatagridView befindet in der ich grob mal die Datensätze anzeige. Obendrüber befindet sich eine NavigationToolbar mit einer abgeänderten "Add" Funktion, diese ruft nämlich ein zweites Form "Eingabefenster" auf, über dem bequem neue Datensätze hinzugefügt werden können.
Nun mein Problem, ich möchte die "Edit" Funktion auch ersetzen und zwar so, dass der aktuelle Datensatz an mein Form "Eingabefenster" übergeben wird und meine Textboxen etc. mit den Werten gefüllt werden. Aber irgendwie weiß ich nicht wie ich die Daten übergebe... 🤔
Help me please 😁
Hi herbivore,
vielen Dank erstmal für deinen Link, so hab ich mir das eigentlich fast gedacht 😉
Also grundsätzlich weiß ich wie ich daten auf eine zweite form übergebe aber muss ich das DataSet übergeben oder die werte einzeln samt datensatz id oder wie bekomm ich das am einfachsten hin?
Grüße Azrael
Hallo Azrael Masters,
Also grundsätzlich weiß ich wie ich daten auf eine zweite form übergebe aber muss ich das DataSet übergeben oder die werte einzeln samt datensatz id oder wie bekomm ich das am einfachsten hin?
Dafür gibt es keine feste Regel. Beides ist möglich und kann sinnvoll sein.
herbivore
Hallo Azrael Masters,
entschuldige Bitte, dass ich jetzt erst antworte.
Dein Vorgehen kann man auf zwei Arten lösen: Entwender, Du übergibst das DataSet, um die Daten in der zweiten Form zur Verfügung zu haben, oder Du machst in dieser Form noch mal ein Fill, um eine neue Instanz des DataSets bzw. der DataTable(s) zu füllen.
Bzgl. der Frage mit dem direkten Anspringen eines Datensatzes: Welche .NET Version benutzt Du denn?
Gruß,
Fabian
"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)
Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…
Blog: www.fabiandeitelhoff.de
Hi Fabian,
kein Problem war ja selber ne Woche im Urlaub 🙂
hm habs jetzt ein bisschen unellegant gelöst (aber UPDATE klappt nicht 😦)
PS: Ich verwende das .NET 2.0 Framework
// Zeile, falls eine Zelle gewählt ist
DataGridViewRow selectedRow = this.dgv_Overview.SelectedCells[0].OwningRow;
// Zeile, fals eine Zeile ganz ausgewählt ist
//DataGridViewRow selectedRow = this.dgv_Overview.SelectedRows[0];
// Davon die erste Zelle mit der ID
DataGridViewCell idCell = selectedRow.Cells[0];
// Wert der ID-Zelle (entspricht dem Primärschlüssel + 1, oder?)
int Pri = (int)idCell.Value;
// Mit hilfe der ID die Reihe in der Table suchen
DataRow DataRow = this.datenbankTest_DataSet.TestTable.Rows[Pri - 1];
EditMask editMask = new EditMask(this, currentDataRow);
editMask.ShowDialog();
private Overview overview;
private DataRow dataRow;
public EditMask(Overview _overview,DataRow _dataRow)
{
overview = _overview;
dataRow = _dataRow;
InitializeComponent();
txt_Name.Text = _dataRow[1].ToString();
txt_Zahl.Text = _dataRow[2].ToString();
}
private void btn_Save_Click(object sender, EventArgs e)
{
// wenn diese Zeile ausgeführt wurde, wird ItemArray nicht aktualisert
this.dataRow.ItemArray[1] = txt_Name.Text;
this.dataRow.ItemArray[2] = this.txt_Zahl.Text;
this.overview.testTableTableAdapter.Update(dataRow);
this.overview.reloadDataSet();
this.Close();
}
Aber wenn es irgendwie eleganter geht oder hier das problem des nicht updatens gelöst wird, wäre ich dankbar 🙂
gruß Azrael
Sry für den Doppelpost, aber keiner eine Idee???
Schade dass mir keiner auf die Sprünge geholften hat (Poster oben ausgenommen, ihr wart ne sehr große Hilfe 🙂 )(bei 178 Views), aber ich hab den Fehler nun gefunden^^
hätte einfach nur die zeilen:
this.dataRow.ItemArray[1] = txt_Name.Text;
this.dataRow.ItemArray[2] = this.txt_Zahl.Text;
zu
this.dataRow[1] = txt_Name.Text;
this.dataRow[2] = this.txt_Zahl.Text;
hätte ändern müssen...
😉 i'm so stupid^^
Greets Azrael
Original von Azrael Masters
// Zeile, falls eine Zelle gewählt ist DataGridViewRow selectedRow = this.dgv_Overview.SelectedCells[0].OwningRow; // Zeile, fals eine Zeile ganz ausgewählt ist //DataGridViewRow selectedRow = this.dgv_Overview.SelectedRows[0]; // Davon die erste Zelle mit der ID DataGridViewCell idCell = selectedRow.Cells[0]; // Wert der ID-Zelle (entspricht dem Primärschlüssel + 1, oder?) int Pri = (int)idCell.Value; // Mit hilfe der ID die Reihe in der Table suchen DataRow DataRow = this.datenbankTest_DataSet.TestTable.Rows[Pri - 1]; EditMask editMask = new EditMask(this, currentDataRow); editMask.ShowDialog();
private Overview overview; private DataRow dataRow; public EditMask(Overview _overview,DataRow _dataRow) { overview = _overview; dataRow = _dataRow; InitializeComponent(); txt_Name.Text = _dataRow[1].ToString(); txt_Zahl.Text = _dataRow[2].ToString(); } private void btn_Save_Click(object sender, EventArgs e) { this.dataRow[1] = txt_Name.Text; this.dataRow[2] = this.txt_Zahl.Text; this.overview.testTableTableAdapter.Update(dataRow); this.overview.reloadDataSet(); this.Close(); }
Hm hab mich geirrt, hab doch noch ein Problem damit... und zwar hab ich übersehen dass ich nur den temporären index benutze und so wenn ich das datagridview sortiere oder zeilen lösche, der index nicht mehr stimmt...
Gibs ne Möglichkeit dgv_Overview.CurrentRow (Typ DataGridView.Row) zu einer DataRow zu konvertieren?
so dass ich im Editfenster immer noch Zuweisen ala
this.dataRow[2] = this.txt_Zahl.Text;
und ein Update
this.overview.testTableTableAdapter.Update(dataRow); durchführen kann???
Bitte helft mir 🙁