并发错误 WinForms 绑定源导航器



我有一个包含客户信息的表单,每页需要处理一笔交易。 我正在使用绑定导航器来管理我的分页。

除某些情况外,它适用于所有情况。 在它不起作用的情况下,我必须打开一个不同的窗口来查找信息并将其返回到主窗体。 这是代码:

// save current work
updateDataTable();
// Open a window and get new customer info
// CurrentCustomer is returned from the opened window
using (SqlConnection cx = new SqlConnection(GetConnectionString()))
{
DataRowView dataRow = (DataRowView)procBindingSource.Current;
dataRow.BeginEdit();
dataRow["CUSTOMER"] = CurrentCustomer; 
dataRow.EndEdit();
updateDataItems();
SqlCommand cmd = new SqlCommand(
@" select acct_no from cust_processing where id = @id ", cx);
cmd.Parameters.AddWithValue("@id", (int)dataRow["ID"]); 
cx.Open();
var results = cmd.ExecuteScalar();
if (results != null)
{
dataRow.BeginEdit();
dataRow["ACCT_NO"] = results.ToString(); 
dataRow.EndEdit();
updateDataItems();  <------   CONCURRENCY ERROR
}  
}

我收到的错误是并发错误。 我认为我可能有多个版本的行? 我以为我通过调用 updateDataTable(( 来确保我在最新版本的行上。 我是唯一的用户,所以我知道我自己在制造问题。

这是我的更新方法,当我更改页面或保存并退出或想要写入提交数据时调用该方法:

void  updateDataItems()
{  
this.procBindingSource.EndEdit();
this.procTableAdapter.Update(xyzDataSet);
xyzDataSet.AcceptChanges();
}

我尝试从各个地方执行更新数据项,例如在我分配 dataRow["ACCT_NO"] = 结果之后。ToString(( 或分配之前和之后。

我几乎可以猜测和检查,所以任何想法,帮助和建议将不胜感激,+1。

好的- 所以问题是我试图从程序中更新当前行并使用绑定导航器。 他们没有正常地合作。

解决方案是在窗体设计器中向窗体添加一个文本框,并设置 visible = false 并将其绑定到ACCT_NO。 从其他表单获得结果后,我只需要将ACCT_NO文本框的 .text 属性设置为新值,绑定导航器就会为我正确管理所有更新。

txtAcct_No.text = results.ToString();

最新更新