LukOnline Geschrieben 12. Januar 2011 Geschrieben 12. Januar 2011 Hallo Leute! Folgender Sachverhalt ist gegeben: Ich bekomme im Konstruktor meines Forms einen Primary Key aus einer Tabelle übergeben. Zu diesem Key möchte ich den zugehörigen Datensatz anzeigen lassen. (in meinen Textfeldern) Wenn man nun etwas in einem Textfeld ändert, soll dann nach einen Knopfdruck der geänderte Wert gespeichert werden. Nur genau da komme ich nicht weiter... Vielleicht weiß ja jemand von euch weiter. Hier erstmal der Code: public partial class Form1 : Form { private DataSet DS; private OleDbConnection Connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Luk\\Documents\\Visual Studio 2005\\Projects\\Kontakt-Manager\\Kontakt-Manager\\Adressbuch\\Adressbuch.accdb;Jet OLEDB:Database Password=Test;"); private string SQL = "SELECT VNAME FROM kontakte WHERE ID = 36"; public Form1() { InitializeComponent(); this.DS = this.CreateDataSet(); this.textBox1.DataBindings.Add("Text", this.DS.Tables["kontakte"], "VNAME"); } private DataSet CreateDataSet() { DataSet DS = new DataSet(); OleDbDataAdapter DA = new OleDbDataAdapter(this.SQL, Connection); DA.Fill(DS, "kontakte"); return DS; } private void button1_Click(object sender, EventArgs e) { OleDbDataAdapter DA = new OleDbDataAdapter(this.SQL, this.Connection); DA.Update(DS, "kontakte"); } } Danke schonmal für eure Hilfe, Luk Zitieren
lilith2k3 Geschrieben 12. Januar 2011 Geschrieben 12. Januar 2011 Guck Dir mal folgendes an: Galileo Computing :: Visual C# 2010 – 28 Stark typisierte DataSets Besonders im Hinblick auf: Galileo Computing :: Visual C# 2010 – 28.4 Der TableAdapter Zitieren
LukOnline Geschrieben 13. Januar 2011 Autor Geschrieben 13. Januar 2011 (bearbeitet) Hallo lilith2k3, vielen Dank erstmal für deine schnelle Antwort. Leider verwirrt mich das nur noch mehr... :old Also mal ganz Prinzipiell, was ist jetzt der Mindestaufbau den ich brauche? In welcher Reihenfolge muss ich was machen? Bisher habe ich die Daten mit einem selbst-gebastelten SQL String über den Primärschlüssel abgefragt (OleDbCommand) und die einzelnen Werte direkt in die TextBoxen geschrieben. Nur das zurück in die DB speichern ist mit dieser Methode schwieriger, weil man nur schwer über überprüfen kann wo sich was geändert hat bzw etwas neu hinzugekommen ist... Bearbeitet 13. Januar 2011 von LukOnline Zitieren
LukOnline Geschrieben 17. Januar 2011 Autor Geschrieben 17. Januar 2011 Hallo zusammen! Ich habe mich nochmal richtig mit dem Thema DataBinding auseinandergesetzt und habe nun folgendes zusammengebastelt (bin bei DataAdapter geblieben, nicht TableAdapter): ... BindingSource BindingSource = new BindingSource(); string SQL = ""; OleDbDataAdapter DataAdapter; DataTable DataTable; ... OleDbConnection Connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Luk\\Documents\\Visual Studio 2005\\Projects\\DataBinding\\Adressbuch.accdb;Jet OLEDB:Database Password=Test;"); SQL = "SELECT * FROM kontakte"; DataAdapter = new OleDbDataAdapter(SQL, Connection); DataTable = new DataTable(); DataAdapter.Fill(DataTable); BindingSource.DataSource = DataTable; dataGridView1.DataSource = BindingSource; textBox1.DataBindings.Add("Text", BindingSource, "VNAME"); bindingNavigator1.BindingSource = BindingSource; ... private void button1_Click(object sender, EventArgs e) { [INDENT]OleDbCommandBuilder CommandBuilder = new OleDbCommandBuilder(DataAdapter); DataAdapter.Update(DataTable); [/INDENT] } Das Funktioniert auch alles bestens! Nur ein kleines Problem habe ich noch, bei dem ich bisher keine Lösung finden konnte: In meinem Endprogramm habe ich kein DatagridView, sondern nur TextBoxen, ComboBoxen usw. Das Update der Datenbank wird aber nur durchgeführt wenn ich im Datagridview direkt etwas ändere. Ich möchte aber auch nur durch eine Änderung in einer TextBox nach einem Knopfdruck Daten verändern. Also ohne DatagridView. Hätte da noch jemand eine Lösung? Danke im voraus! Luk Zitieren
LukOnline Geschrieben 20. Januar 2011 Autor Geschrieben 20. Januar 2011 Leider hat keiner mehr geantwortet Ich habe inzwischen endlich die Lösung gefunden: In der TextBox ist nur eine Kopie des Wertes aus dem DataSet. Wenn man die Methode DataAdapter.Update(); aufruft, wird das DataSet zwar zurückgeschrieben, es weiß aber nichts von den Änderungen in der TextBox. Deswegen muss man vor der Update-Methode noch folgendes machen: this.textBox.DataBindings[0].BindingManagerBase.EndCurrentEdit(); Dabei wird der Wert der TextBox zurück ins DataSet geschrieben. Und danach wird der neue Wert aus dem DataSet in die Datenbank geschrieben. Das DataGridView scheint diese Vorgänge implizit durchzuführen. Luk Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.