Zum Inhalt springen

[C#] DataBinding mit Access2007 Datenbank


LukOnline

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von LukOnline
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...