目前的情况是有一个数据绑定数据网格视图,许多人每天都需要同时对其进行更改。网格必须能够保存和更新,但它不能正常工作,因为它非常活跃。
这是场景:
- 3人同时打开网格表格。
- 他们对 3 行不同的数据进行更改。
- 第 1 个人保存更改并成功。
- 人员 2 保存更改并成功,但人员 1 的更改现在已消失,因为人员 2 的网格未与人员 1 刚刚提交的数据同步。
- 第 3 个人保存更改并清除第 1 个人和第 2 个人所做的任何事情,因为第 3 个人的数据网格视图未与更新的数据同步。
我首先尝试了这种方法:
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();
}
由于上述原因,这对我来说并不奏效。只是没有正确保存数据。
这是我的第二个想法,但仍然存在上述问题:
// 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();
基本上,我该如何解决这个断开连接的问题?以前有人遇到过这个问题吗?