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:
- 3 Personen öffnen das Rasterformular zur gleichen Zeit.
- Sie nehmen Änderungen an 3 verschiedenen Datenzeilen vor.
- Person 1 speichert die Änderungen und ist erfolgreich.
- 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.
- 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?