Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[C#] DataBinding mit Access2007 Datenbank

Empfohlene Antworten

Veröffentlicht

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

  • Autor

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

  • Autor

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

  • Autor

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.