Ошибка параллелизма WinForms Binding Source Navigator - PullRequest
0 голосов
/ 23 мая 2018

У меня есть форма с информацией о клиенте, которую нужно обработать по одной транзакции на страницу.Я использую навигатор для управления пагинацией.

Это работает во всех случаях, кроме некоторых.В тех случаях, когда это не работает, мне нужно открыть другое окно, чтобы найти информацию и вернуть ее в основную форму.Вот код для этого:

        // 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.

1 Ответ

0 голосов
/ 28 мая 2018

Хорошо - проблема в том, что я пытался обновить текущую строку из программы, а также с помощью навигатора привязки.Они не работали вместе должным образом.

Решением было добавить текстовое поле в форму в конструкторе форм и установить visible = false и связать его с ACCT_NO.Как только я получил результаты из другой формы, мне просто нужно было установить для свойства .text текстового поля ACCT_NO новое значение, и навигатор привязок правильно управлял всеми моими обновлениями.

txtAcct_No.text = results.ToString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...