#vb.net #ado.net
#vb.net #ado.net
Вопрос:
Когда я вставляю данные из моего datagridview в свою базу данных, в конце вставляется дополнительная строка, которая не содержит данных. Как я могу преодолеть эту проблему. Каждый раз, когда я нажимаю на новую строку в моем datagridview и начинаю вводить данные, новая строка включается ниже. Есть ли какой-либо способ остановить вставку этой пустой строки в мою базу данных? Спасибо, вот мой код…
Dim ds As New DataSet
ds.Tables.Add("Main")
Dim col As New DataColumn
Dim dgvCol As New DataGridViewColumn
For Each dgvCol In DataGridView1.Columns
col = New DataColumn(dgvCol.Name)
ds.Tables("Main").Columns.Add(col)
Next
Dim row As DataRow
Dim colcount As Integer = DataGridView1.Columns.Count - 1
For i As Integer = 0 To DataGridView1.Rows.Count - 1
row = ds.Tables("Main").Rows.Add
For Each column As DataGridViewColumn In DataGridView1.Columns
row.Item(column.Index) = DataGridView1.Rows.Item(i).Cells(column.Index).Value
Next
Next
Dim con As New SqlClient.SqlConnection
Dim myCommand As New SqlClient.SqlCommand
Dim dt As New DataTable()
dt = ds.Tables("Main")
For i As Integer = 0 To dt.Rows.Count - 1
Dim myAdapter As New SqlClient.SqlDataAdapter
Dim sql As String = "Insert into details (company, division, date, supplier, material_group, cost, dsc, email, userID, fullName, marketingCode, hccNumber, wbs, qty, currency, timestamp) VALUES ('" amp; DataGridView1.Rows(i).Cells(company.Name).Value amp; "', '" amp; DataGridView1.Rows(i).Cells(division.Name).Value amp; "','" amp; calendar amp; "', '" amp; DataGridView1.Rows(i).Cells(supplier.Name).Value amp; "', '" amp; DataGridView1.Rows(i).Cells(materialGroup.Name).Value amp; "', '" amp; DataGridView1.Rows(i).Cells(netprice.Name).Value amp; "', '" amp; DataGridView1.Rows(i).Cells(description.Name).Value amp; "', '" amp; cmbEmail.SelectedValue amp; "', '" amp; id amp; "', '" amp; newName amp; "', '" amp; DataGridView1.Rows(0).Cells(markCodes.Name).Value amp; "', '" amp; DataGridView1.Rows(0).Cells(hccNumber.Name).Value amp; "', '" amp; DataGridView1.Rows(i).Cells(wba.Name).Value amp; "', '" amp; DataGridView1.Rows(i).Cells(quantity.Name).Value amp; "', '" amp; DataGridView1.Rows(i).Cells(currency.Name).Value amp; "', '" amp; nowDate amp; "')"
myCommand.Connection = con
myCommand.CommandText = sql
myAdapter.InsertCommand = myCommand
myCommand.Connection.Open()
myCommand.ExecuteNonQuery()
myCommand.Connection.Close()
Next.
Ответ №1:
Вам нужно будет проверить вашу строку на наличие значений в вашем цикле, попробуйте проверить каждую ячейку (или конкретную ячейку) на DBNull.Значение перед его сохранением. В качестве альтернативы вы можете установить для allowuserstoaddrow значение false, чтобы предотвратить отображение пустой строки.
Комментарии:
1. Спасибо, я уже пробовал
AllowUserToAddRows = False
, но когда я это сделал, я вообще не смог добавить никаких строк, оставив меня с пустым gridview.2. Хорошо, тогда вам нужна проверка DBNull.
Ответ №2:
Добавьте проверку внутри цикла Смотрите пример кода ниже
For Each rw As DataGridViewRow In Form1.DataGridView1.Rows
If rw.Cells("Column2").Value <> Nothing Then
ITM_ID = rw.Cells("Column1").Value
DSPL_RCT = rw.Cells("Column2").Value
SLS_QTY = rw.Cells("Column3").Value
SLS_PRC = rw.Cells("Column4").Value
SLS_AMT = rw.Cells("Column5").Value
TAX_CODE = rw.Cells("Column6").Value
'INSERT A RECORD INTO THE DATABASE
Dim cmd As New SqlCommand("INSERT INTO DAY_PLUSALES (DT,ITM_ID,DSPL_RCT,SLS_QTY,SLS_PRC,SLS_AMT,TAX_CODE) values ('" amp; Form1.TextBox6.Text amp; "','" amp; ITM_ID amp; "','" amp; DSPL_RCT amp; "','" amp; SLS_QTY amp; "','" amp; SLS_PRC amp; "','" amp; SLS_AMT amp; "','" amp; TAX_CODE amp; "')", con)
cmd.ExecuteNonQuery()
End If
Next