Member 13153537 Ответов: 1

Как справиться с недопустимой операцией приведения


У меня есть выпадающий список столбце bankname,accountno accounttype, начиная текстовое поле и поле со списком.Если я выберу bankname из выпадающего списка.Он показывает связанные данные в datagridview из таблицы базы данных.Если выбрать
"Выберите" текст из bankcombobox. Он не показывает никаких данных в datagridview. Я хочу добавить новую строку вверху datagridview, когда я нажимаю addbutton. Новая строка добавляется успешно. В datagridview у меня есть текстовые поля, такие как slno, startno, noofcheques и endno и status. после ввода startno и noofcheques оба будут добавлять данные заполнения в конце без текста для этого я использую событие выхода из ячейки. когда я загружаю форму впервые, добавляется новая строка, и значения рассчитываются нормально. когда я сначала выбираю имя банка и затем выберите "выбрать" текст, нажмите кнопку добавления новой строки, добавляется строка, но когда я пытаюсь ввести значения в текстовое поле startno. Это вызывает ошибку. 'System.InvalidCastException' произошла в mscorlib.dll. Объект не может быть преобразован из DBNull в другие типы.
Я посвежел, пожалуйста, помогите мне в этом.

Что я уже пробовал:

       private void dgvwChqs_CellLeave(object sender, DataGridViewCellEventArgs e)
       {

          if (dgvwChqs.Rows[e.RowIndex].Cells["startno"].Value != null)
           {
               dgvwChqs.Rows[e.RowIndex].Cells["endingno"].Value =
           Convert.ToInt32(dgvwChqs.Rows[e.RowIndex].Cells["startno"].Value) + Convert.ToInt32(dgvwChqs.Rows[e.RowIndex].Cells["noofcheques"].Value);
           }
       }


private void btnadd_Click(object sender, EventArgs e)
       {

           dts.Rows.InsertAt(dts.NewRow(), 0);



           }

1 Ответов

Рейтинг:
7

Maciej Los

Сообщение об ошибке: System.InvalidCastException' occurred in mscorlib.dll.Object cannot be cast from DBNull to other types. это совершенно ясно. Это означает, что один из startno и noofcheques поле равно нулю!
Вы можете проверить, не является ли это значение нулевым, используя IsDbNull[^] метод или вы можете заменить null со значением по умолчанию:

//first method
int startno = 0;
int noofcheques = 0;
if(!Convert.IsDbNull(dgvwChqs.Rows[e.RowIndex].Cells["startno"].Value))
    startno = dgvwChqs.Rows[e.RowIndex].Cells["startno"].Value; //assuming that startno field stores integer values
if(!Convert.IsDbNull(dgvwChqs.Rows[e.RowIndex].Cells["noofcheques"].Value))
    noofcheques = dgvwChqs.Rows[e.RowIndex].Cells["noofcheques"].Value;

//second method
int startno = Convert.IsDbNull(dgvwChqs.Rows[e.RowIndex].Cells["startno"].Value)==true ? dgvwChqs.Rows[e.RowIndex].Cells["startno"].Value : 0;
int noofcheques = Convert.IsDbNull(dgvwChqs.Rows[e.RowIndex].Cells["noofcheques"].Value)==true ? dgvwChqs.Rows[e.RowIndex].Cells["noofcheques"].Value : 0;

//finally:
dgvwChqs.Rows[e.RowIndex].Cells["endingno"].Value = startno + noofcheques;


Другой способ-использовать nullable типы данных. Для получения более подробной информации, пожалуйста, смотрите: Использование Нулевых Типов (Руководство По Программированию На C#) | Microsoft Docs[^]


Member 13153537

Спасибо вам за ваш ответ.

Maciej Los

Всегда пожалуйста.
Овации,
Мацей