Hej,
W DGV mam dwa ComboBoxy, do których są pobierane dane z dwóch różnych tabel.
Podczas próby wprowadzania danych w nowym wersie po wyborze w jednym z comboboxow itemu wyrzuca mi błąd: System.InvalidCastException: "Nie można rzutować z elementu DBNull na inne typy"
Comboboxy wypełniam tak:
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM tblProdukty", con);
DataTable dtbl = new DataTable();
da.Fill(dtbl);
cbxID_Produktu.ValueMember = "ID_Produktu";
cbxID_Produktu.DisplayMember = "PN_Wewnetrzny_Produktu";
DataRow topItem = dtbl.NewRow();
topItem[0] = 0;
topItem[1] = "-Wybierz-";
dtbl.Rows.InsertAt(topItem, 0);
cbxID_Produktu.DataSource = dtbl;
}```
Natomiast wprowadzanie danych mam tutaj:
if (dgvBOM.CurrentRow != null)
{
using (SqlConnection sqlCon = new SqlConnection(connectionString))
{
sqlCon.Open();
DataGridViewRow dgvRow = dgvBOM.CurrentRow;
SqlCommand sqlCmd = new SqlCommand("BOMDodEdyt", sqlCon);
sqlCmd.CommandType = CommandType.StoredProcedure;
if (dgvRow.Cells["txtID_BOM"].Value == DBNull.Value)//Insert
sqlCmd.Parameters.AddWithValue("@ID_BOM", 0);
else//update
sqlCmd.Parameters.AddWithValue("@ID_BOM", Convert.ToInt32(dgvRow.Cells["txtID_BOM"].Value));
sqlCmd.Parameters.AddWithValue("@ID_Produktu", Convert.ToInt32(dgvRow.Cells["cbxID_Produktu"].Value));
sqlCmd.Parameters.AddWithValue("@ID_Komponentu", Convert.ToInt32(dgvRow.Cells["cbxID_Komponentu"].Value));
sqlCmd.Parameters.AddWithValue("@Ilość", Convert.ToDecimal(dgvRow.Cells["txtIlość"].Value));
sqlCmd.ExecuteNonQuery();
PopulateDataGridView();
}
}```
Zapewne muszę dodać jakieś wyjątek lub zmienić wartość przyjmowaną przez combobox na początku. Za groma nie wiem jak to ugryźć. Obie kolumny są PK w tabelach macierzystych, więc nie 0 są niedozwolone.
Za pomoc stawiam piwo :)