Datagridview нарушения параллелизма - PullRequest
1 голос
/ 31 октября 2011

Здравствуйте. Я использую следующий код для обновления DGV во время проверки:

        private void propertyInformationDataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
    {

        if (propertyInformationDataGridView.IsCurrentCellDirty && e.ColumnIndex.ToString() != "3")
        {
            propertyInformationTableAdapter.Update((newCityCollectionDataSet)propertyInformationBindingSource.DataSource);
        }
    }

И этот код для обновления DGV и передачи значений в определенные таблицы:

private void propertyInformationDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
     if (e.ColumnIndex.ToString() == "3")
        {
            DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)propertyInformationDataGridView.Rows[e.RowIndex].Cells[3];


            DataGridViewRow row = propertyInformationDataGridView.Rows[e.RowIndex] as DataGridViewRow;

            System.Data.DataRowView SelectedRowView;
            newCityCollectionDataSet.PropertyInformationRow SelectedRow;

            SelectedRowView = (System.Data.DataRowView)propertyInformationBindingSource.Current;
            SelectedRow = (newCityCollectionDataSet.PropertyInformationRow)SelectedRowView.Row;

            if (Convert.ToBoolean(checkCell.Value) == false && propertyInformationDataGridView.IsCurrentCellDirty)
            {
                DataClasses1DataContext dc = new DataClasses1DataContext();

                var matchedCaseNumber = (from c in dc.GetTable<PropertyInformation>()
                                         where c.CaseNumberKey == SelectedRow.CaseNumberKey
                                         select c).SingleOrDefault();
                DateTime saveNow = DateTime.Now;

                reportsSent newReport = new reportsSent();
                newReport.CaseNumberKey = SelectedRow.CaseNumberKey;
                dc.reportsSents.InsertOnSubmit(newReport);
                matchedCaseNumber.DateFinished = saveNow;
                dc.SubmitChanges();

            }


        }
    }

Что происходит, когда я щелкаю по значению готово или по значению ячейки 3, а затем щелкаю по другой ячейке, например, по значению ячейки 0 в другой записи, я получаю ошибку. Я понимаю, почему я получаю ошибку, но как мне предотвратить это? Должен ли я переместить код из проверки в щелчок, чтобы ошибка не возникала или есть другой способ справиться с этим? Причина возникновения ошибки заключается в том, что я обновляюсь следующим образом: dc.SubmitChanges();, а затем снова обновляется здесь:

if (propertyInformationDataGridView.IsCurrentCellDirty && e.ColumnIndex.ToString() != "3")
        {
            propertyInformationTableAdapter.Update((newCityCollectionDataSet)propertyInformationBindingSource.DataSource);
        }

Я не уверен, как заставить правильный набор данных обновляться после завершения дела.

Ошибка:

Нарушение параллелизма: команда UpdateCommand затронула 0 из ожидаемых 1 записей.

В конструкторе это появляется здесь:

 [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
    [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
    public virtual int Update(newCityCollectionDataSet dataSet) {
        return this.Adapter.Update(dataSet, "PropertyInformation");

Спасибо

Kor

1 Ответ

0 голосов
/ 01 ноября 2011

Почему именно вы комбинируете строго типизированные наборы данных и LINQ to SQL?Как вы уже догадались, они пытаются обновить одни и те же данные, поэтому вторым становится фреймворк с ConcurrencyViolation.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...