Допустим,
- У меня есть datagridview1 в моей форме с некоторыми полями со списком и элементами управления текстовыми полями,
- datagridview1 не привязан ни к какому источнику данных
- При событии dataGridView1_CellValueChanged он проверит некоторые условия и, соответственно, выполнит операции вставки и обновления (скажем, если ID.Value == null , затем вставьте запись, в противном случае обновите текущую запись)
- Все операции для вставки, обновления и удаления работают нормально, пока я не привяжу datagridview1 к элементу управления bindingsource.
- 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 в моей форме.
Есть ли элегантный способ справиться с вышеуказанной ситуацией?