并发错误WinForms绑定源导航器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发错误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();
      }

我尝试从各个地方执行updateDataItems,例如在我分配dataRow [“ACCT_NO”] = results.ToString()之后或者在分配之前和之后。

我几乎要猜测并检查所以任何想法,帮助和建议将被赞赏和+1。

答案

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

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

txtAcct_No.text = results.ToString();

以上是关于并发错误WinForms绑定源导航器的主要内容,如果未能解决你的问题,请参考以下文章

Winforms DataGridView 数据绑定到复杂类型/嵌套属性

为啥覆盖 .GetHashCode 会清除 WinForms 中的这些数据绑定值?

使用视图绑定访问另一个活动的 UI 元素

如何使用来自底层绑定源的行对 datagridview 行执行样式更改?

Winforms 中的数据绑定

Android - 使用活动和片段导航 - 二进制 XML 文件错误