Объект нельзя преобразовать из DBNull в другие типы (после использования BindingSource bindingSource1 = new BindingSource ();) - PullRequest
0 голосов
/ 26 марта 2019

Допустим,

  1. У меня есть datagridview1 в моей форме с некоторыми полями со списком и элементами управления текстовыми полями,
  2. datagridview1 не привязан ни к какому источнику данных
  3. При событии dataGridView1_CellValueChanged он проверит некоторые условия и, соответственно, выполнит операции вставки и обновления (скажем, если ID.Value == null , затем вставьте запись, в противном случае обновите текущую запись)
  4. Все операции для вставки, обновления и удаления работают нормально, пока я не привяжу datagridview1 к элементу управления bindingsource.
  5. BindingSource связывает datagridview1 с DataTable dtFwdTo (проблема начинается здесь)

Я получаю сообщение об ошибке «Объект не может быть преобразован из DBNull в другие типы» при обновлении/ вставка записи в базу данных, как только я связываю DataGridView с Datatable, используя BindingSource.

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if (dataGridView1.CurrentRow.Cells["cbxforwardTo"].Value != null)//if the combobox value is not empty
    {
        if (dataGridView1.CurrentRow.Cells["ID"].Value == null)//if the ID.Value is null
        {
            InsertFwdTo();//Insert record to database.          
        }

        else if (dataGridView1.CurrentRow.Cells["ID"].Value != null)//if ID is not null
        {
            UpdateFwdTo(Convert.ToInt32(dataGridView1.CurrentRow.Cells["ID"].Value));//Update the current record in database
        }
    }
}


Приведенный выше код работает нормально и обновит / вставит запись, как и ожидалось, но как только я использую BindingSource дляполучить dat dataGridView1.CurrentRow.Cells ["ID"]. Значение обнуляется и выдать вышеуказанную ошибку.

BindingSource bindingSource1 = new BindingSource();
bindingSource1.DataSource = DbOperations.Operations.dtFwdTo;
dataGridView1.AutoGenerateColumns = false;
dataGridView1.DataSource = bindingSource1;

Я использую bindingSource1 для привязки dtFwdTo (DataTable) для datagridview1 в моей форме.

Есть ли элегантный способ справиться с вышеуказанной ситуацией?

...