none
BindingSource aktualisieren RRS feed

  • Frage

  • Hallo,
    wie aktualisiere ich eine BindingSource ?

    Hintergrund:
    Projekt: Windows Forms Projekt (.net Framework 4.8)

    Die Datenbank (MySQL) vergibt eine eindeutige ID.
    Diese benötige ich nach der Anlage eines neuen Datensatzes.

    Ich habe auf meinem Formular verschiedene Textboxen an die BindingSource gebunden.
    Diese sollen nach der Speicherung aktualisiert werden.

    Bindingsource.ResetBindings(False) hat bei mir leider nicht funktioniert
    Freitag, 16. April 2021 21:34

Antworten

  • Hi,
    ohne Code kann ich dein Problem nicht reproduzieren. Hier mal ein demo, wie das bei mir funktioniert:

    using MySql.Data.MySqlClient;
    using System;
    using System.Data;
    using System.Windows.Forms;
    
    namespace WindowsFormsApp1
    {
      public partial class Form27 : Form
      {
        public Form27()
        {
          InitializeComponent();
        }
    
        private SplitContainer sc = new SplitContainer() { Dock = DockStyle.Fill };
        private Button btn1 = new Button() { Text = "Save", Dock = DockStyle.Bottom };
        private DataGridView dgv1 = new DataGridView() { Dock = DockStyle.Fill };
        private BindingSource bs1 = new BindingSource();
        private DataTable dt1 = new DataTable();
        private TextBox tb1a = new TextBox() { Dock = DockStyle.Top };
        private TextBox tb1b = new TextBox() { Dock = DockStyle.Top };
    
        private Button btn2 = new Button() { Text = "Load", Dock = DockStyle.Top };
        private DataGridView dgv2 = new DataGridView() { Dock = DockStyle.Fill };
        private BindingSource bs2 = new BindingSource();
        private DataTable dt2;
        private TextBox tb2a = new TextBox() { Dock = DockStyle.Top };
    
        private void Form21_Load(object sender, EventArgs e)
        {
          this.Controls.Add(sc);
          this.sc.Panel1.Controls.AddRange(new Control[] { dgv1, btn1, tb1b, tb1a });
          this.btn1.Click += this.SaveData;
    
          this.sc.Panel2.Controls.AddRange(new Control[] { dgv2, btn2, tb2a });
          this.btn2.Click += this.LoadData;
    
          using (MySqlDataAdapter da = new MySqlDataAdapter("SELECT * FROM Tab1", Properties.Settings.Default.cnMySql))
          {
            da.Fill(dt1);
            dt1.Columns["id"].AutoIncrement = true;
            dt1.Columns["id"].AutoIncrementSeed = -1;
            dt1.Columns["id"].AutoIncrementStep = -1;
          }
    
          this.bs1.DataSource = dt1;
          this.dgv1.DataSource = this.bs1;
          this.tb1a.DataBindings.Add("Text", bs1, "id");
          this.tb1b.DataBindings.Add("Text", bs1, "name");
    
          this.dgv2.DataSource = this.bs2;
        }
        private void SaveData(object sender, EventArgs e)
        {
          using (MySqlDataAdapter da = new MySqlDataAdapter("SELECT * FROM Tab1", Properties.Settings.Default.cnMySql))
          {
            MySqlCommandBuilder cb = new MySqlCommandBuilder(da);
            da.RowUpdated += (s, e2) =>
            {
              try
              {
                MySqlCommand idCMD = new MySqlCommand("SELECT LAST_INSERT_ID()", e2.Command.Connection);
                if (e2.StatementType == StatementType.Insert)
                {
                  var newID = (ulong)(idCMD.ExecuteScalar());
                  foreach (DataColumn col in e2.Row.Table.Columns)
                    if (col.AutoIncrement == true)
                    {
                      e2.Row[col.ColumnName] = newID;
                      return;
                    }
                }
              }
              catch (Exception ex)
              {
                MessageBox.Show(ex.Message);
              }
            };
            da.Update(dt1);
          }
        }
    
        private void LoadData(object sender, EventArgs e)
        {
          dt2 = new DataTable();
          using (MySqlDataAdapter da = new MySqlDataAdapter("SELECT * FROM Tab1", Properties.Settings.Default.cnMySql))
            da.Fill(dt2);
          this.bs2.DataSource = dt2;
          this.tb2a.DataBindings.Add("Text", bs2, "name");
        }
      }
    }

    Das Ergebnis:


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    Samstag, 17. April 2021 10:18

Alle Antworten

  • Hi,
    ohne Code kann ich dein Problem nicht reproduzieren. Hier mal ein demo, wie das bei mir funktioniert:

    using MySql.Data.MySqlClient;
    using System;
    using System.Data;
    using System.Windows.Forms;
    
    namespace WindowsFormsApp1
    {
      public partial class Form27 : Form
      {
        public Form27()
        {
          InitializeComponent();
        }
    
        private SplitContainer sc = new SplitContainer() { Dock = DockStyle.Fill };
        private Button btn1 = new Button() { Text = "Save", Dock = DockStyle.Bottom };
        private DataGridView dgv1 = new DataGridView() { Dock = DockStyle.Fill };
        private BindingSource bs1 = new BindingSource();
        private DataTable dt1 = new DataTable();
        private TextBox tb1a = new TextBox() { Dock = DockStyle.Top };
        private TextBox tb1b = new TextBox() { Dock = DockStyle.Top };
    
        private Button btn2 = new Button() { Text = "Load", Dock = DockStyle.Top };
        private DataGridView dgv2 = new DataGridView() { Dock = DockStyle.Fill };
        private BindingSource bs2 = new BindingSource();
        private DataTable dt2;
        private TextBox tb2a = new TextBox() { Dock = DockStyle.Top };
    
        private void Form21_Load(object sender, EventArgs e)
        {
          this.Controls.Add(sc);
          this.sc.Panel1.Controls.AddRange(new Control[] { dgv1, btn1, tb1b, tb1a });
          this.btn1.Click += this.SaveData;
    
          this.sc.Panel2.Controls.AddRange(new Control[] { dgv2, btn2, tb2a });
          this.btn2.Click += this.LoadData;
    
          using (MySqlDataAdapter da = new MySqlDataAdapter("SELECT * FROM Tab1", Properties.Settings.Default.cnMySql))
          {
            da.Fill(dt1);
            dt1.Columns["id"].AutoIncrement = true;
            dt1.Columns["id"].AutoIncrementSeed = -1;
            dt1.Columns["id"].AutoIncrementStep = -1;
          }
    
          this.bs1.DataSource = dt1;
          this.dgv1.DataSource = this.bs1;
          this.tb1a.DataBindings.Add("Text", bs1, "id");
          this.tb1b.DataBindings.Add("Text", bs1, "name");
    
          this.dgv2.DataSource = this.bs2;
        }
        private void SaveData(object sender, EventArgs e)
        {
          using (MySqlDataAdapter da = new MySqlDataAdapter("SELECT * FROM Tab1", Properties.Settings.Default.cnMySql))
          {
            MySqlCommandBuilder cb = new MySqlCommandBuilder(da);
            da.RowUpdated += (s, e2) =>
            {
              try
              {
                MySqlCommand idCMD = new MySqlCommand("SELECT LAST_INSERT_ID()", e2.Command.Connection);
                if (e2.StatementType == StatementType.Insert)
                {
                  var newID = (ulong)(idCMD.ExecuteScalar());
                  foreach (DataColumn col in e2.Row.Table.Columns)
                    if (col.AutoIncrement == true)
                    {
                      e2.Row[col.ColumnName] = newID;
                      return;
                    }
                }
              }
              catch (Exception ex)
              {
                MessageBox.Show(ex.Message);
              }
            };
            da.Update(dt1);
          }
        }
    
        private void LoadData(object sender, EventArgs e)
        {
          dt2 = new DataTable();
          using (MySqlDataAdapter da = new MySqlDataAdapter("SELECT * FROM Tab1", Properties.Settings.Default.cnMySql))
            da.Fill(dt2);
          this.bs2.DataSource = dt2;
          this.tb2a.DataBindings.Add("Text", bs2, "name");
        }
      }
    }

    Das Ergebnis:


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    Samstag, 17. April 2021 10:18
  • Hallo futzi123,

    Ich nehme an, dass Peters Antwort Dir weitergeholfen hat. Bitte lass uns wissen, wenn Du zusätzliche Fragen hast.

    Gruß,

    Ivan Dragov

    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Donnerstag, 29. April 2021 13:58
    Moderator
  • Danke Peter
    Dienstag, 4. Mai 2021 07:43