2 Stimmen

Problem mit gleichzeitigen Benutzern, die Änderungen in einem databunden DataGridView vornehmen

Die derzeitige Situation besteht darin, dass es eine datengebundene Datengitteransicht gibt, an der viele Personen täglich gleichzeitig Änderungen vornehmen müssen. Das Raster muss gespeichert und aktualisiert werden können, aber es funktioniert nicht richtig, da es sehr aktiv ist.

Das Szenario sieht folgendermaßen aus:

  1. 3 Personen öffnen das Rasterformular zur gleichen Zeit.
  2. Sie nehmen Änderungen an 3 verschiedenen Datenzeilen vor.
  3. Person 1 speichert die Änderungen und ist erfolgreich.
  4. Person 2 speichert die Änderungen und ist erfolgreich, aber die Änderungen von Person 1 sind jetzt verschwunden, da das Raster von Person 2 nicht mit den Daten synchronisiert wurde, die Person 1 gerade übermittelt hat.
  5. Person 3 speichert die Änderungen und löscht alles, was Person 1 und 2 gemacht haben, weil die Datengitteransicht von Person 3 nicht mit den aktualisierten Daten synchronisiert wurde.

Ich habe diesen Ansatz zuerst ausprobiert:

    private MySqlDataAdapter da;
    private MySqlConnection conn;
    BindingSource bs = new BindingSource();
    DataSet ds = null;
    string qry;
    string ConnString = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];

    // THE LOAD METHOD
    private void LoadDataToGrid(string srcTable, string query)
    {
        conn = new MySqlConnection(ConnString);
        // ADD ANY QUERY
        qry = query;
        da = new MySqlDataAdapter(qry, conn);
        conn.Open();
        ds = new DataSet();
        MySqlCommandBuilder cb = new MySqlCommandBuilder(da);

        // USE TABLE NAME
        da.Fill(ds, srcTable);
        //USE TABLE NAME
        bs.DataSource = ds.Tables[srcTable];
        dataGridView1.DataSource = bs;

        // CUSTOMIZE GRID
        txtRows.Text = dataGridView1.Rows.Count.ToString();
        dataGridView1.AutoResizeColumns();
        dataGridView1.AllowUserToDeleteRows = false;
    }

    // THE SAVE METHOD
    private void SaveDataFromGrid(string srcTable)
    {
        // USE TABLE NAME
        DataTable dt = ds.Tables[srcTable];
        this.dataGridView1.BindingContext[dt].EndCurrentEdit();
        this.da.Update(dt);

        txtRows.Text = dataGridView1.Rows.Count.ToString();
    }

Das hat bei mir aus den oben genannten Gründen nicht funktioniert. Die Daten wurden einfach nicht richtig gespeichert.

Das war mein zweiter Gedanke, aber er leidet immer noch unter dem oben genannten Problem:

   // Load event
   dataGridView1.DataSource = context.TableName;

   // btnSave_click Event
   connection.open();

       // loop through cells in current row and apply changes by id

   context.tableName.Attach(DataFromGrid);
   context.ObjectStateManager.ChangeObjectState(DataFromGrid, System.Data.EntityState.Modified);
   context.savechanges();

Wie kann ich dieses Problem der Verbindungsunterbrechung grundsätzlich lösen? Hatte jemand dieses Problem schon einmal?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X