gpt4 book ai didi

c# - 同时用户在数据绑定(bind) DataGridView 中进行更改时出现问题

转载 作者:太空宇宙 更新时间:2023-11-03 16:31:13 24 4
gpt4 key购买 nike

目前的情况是有一个数据绑定(bind)的数据 GridView ,许多人每天都需要同时对其进行更改。网格必须能够保存和更新,但它无法正常工作,因为它非常活跃。

场景如下:

  1. 3 个人同时打开表格。
  2. 他们更改了 3 行不同的数据。
  3. 人员 1 保存更改并成功。
  4. 人员 2 保存更改并成功,但人员 1 的更改现已消失,因为人员 2 的网格未与人员 1 刚刚提交的数据同步。
  5. 人 3 保存更改并清除人 1 和 2 所做的任何事情,因为人 3 的数据 GridView 未与更新后的数据同步。

我首先尝试过这种方法:

    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();

基本上,我该如何解决这个断开连接的问题?以前有人遇到过这个问题吗?

最佳答案

这个问题可能比一个代码片段要解决的问题更复杂。在开始实现之前,您似乎有几件事情需要先解决;

首先;每个人的更改实际上必须提交整个网格吗?根据你的场景,每个人更改不同的一行数据。修改您的代码以仅将更改提交到被修改的行将大大减少您的冲突场景。

其次,无论冲突是发生在一行中还是多行中,您都需要决定如何管理冲突(您没有注意到您期望发生什么——例如;数据库获胜、用户的选择等。) .

EF 实现了乐观并发模式(无数据库锁),但默认情况下,它只会在您提交本地更改时选择覆盖数据库更改。您需要修改您的 EF 配置以设置 ConcurrenyMode=Fixed,这样当您在提交行之前没有“获得最新”时它不会自动覆盖更改。

有关 EF 如何处理并发的更多信息,请参阅此处:http://msdn.microsoft.com/en-us/library/bb738618.aspx

修改 EF 配置后,您将在检测到冲突时开始收到异常,您需要通过刷新数据库中的数据(使用本地更改)或刷新本地数据 (与数据库更改)。

关于c# - 同时用户在数据绑定(bind) DataGridView 中进行更改时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10739102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com