У меня есть ComboboxCell в первой ячейке Datagridview. Этот combobox имеет Datasource из моей БД. Когда я выбираю Item from It, все остальные ячейки в строке заполняются записью из моей БД. Теперь я хочу предотвратить дублирование записей строк на основе выбранного элемента Comboboxcell. После этого я хочу очистить Comboboxcell и сохранить код. Мне удалось сделать почти все, но проблема в том, что после отображения msgbox код перестает работать - поэтому, когда я снова выбираю ComboboxCell Item, ничего не происходит, даже в новой строке. Вот мой весь код:Datagridview - предотвратить дубликаты в comboboxcell
Private Sub My_DGV_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles My_DGV.CellValueChanged
If My_DGV.Columns(e.ColumnIndex).Name = "Column1" Then
'Prevent duplicates
For i As Integer = 0 To My_DGV.RowCount - 2
For j As Integer = i + 1 To My_DGV.RowCount - 2
If My_DGV.Rows(i).Cells(0).Value = My_DGV.Rows(j).Cells(0).Value Then
MsgBox("You allready selected this item. Duplicates are not allowed.", MsgBoxStyle.Information, "Warning")
My_DGV.Rows(j).Cells(0).Value = " "
Dim cbx As ComboBox = DGV_APO.EditingControl
cbx.SelectedIndex = -1
Exit Sub
End If
Next
Next
OracleconnOpen()
Using cmd As New OracleCommand()
Dim SQL As String = "Select NAMES,SURNAMES,STATE FROM My_Table"
Dim Concat_SQL As String = " Where "
SQL = String.Concat(SQL, Concat_SQL, " ID_NUMBER = :id")
cmd.Parameters.Add(New OracleParameter("id", My_DGV.CurrentRow.Cells(0).Value))
cmd.Connection = OracleconnOpen()
cmd.CommandText = SQL
cmd.CommandType = CommandType.Text
Dim dr As OracleDataReader = cmd.ExecuteReader()
Dim dt As New DataTable
dt.Load(dr)
My_DGV.CurrentRow.Cells(1).Value = dt.Rows(0)("NAMES").ToString()
My_DGV.CurrentRow.Cells(2).Value = dt.Rows(0)("SURNAMES").ToString()
My_DGV.CurrentRow.Cells(3).Value = dt.Rows(0)("STATE").ToString()
End Using
OracleconnClose()
End If
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'SELECT from my DB
Dim SQL As String = "SELECT ID_NUMBER from My_Table"
Dim dtb As New DataTable()
Try
OracleconnOpen() 'Open my connection
Using dad As New OracleDataAdapter(SQL, OracleconnOpen)
dad.Fill(dtb)
End Using
Column1.DisplayMember = "ID_NUMBER"
Column1.DataSource = dtb
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
OracleconnClose() 'Close my connection
End Try
End Sub
Private Sub My_DGV_CurrentCellDirtyStateChanged(sender As Object, e As EventArgs) Handles My_DGV.CurrentCellDirtyStateChanged
If My_DGV.IsCurrentCellDirty Then My_DGV.CommitEdit(DataGridViewDataErrorContexts.Commit)
End Sub
Private Sub My_DGV_DataError(sender As Object, e As DataGridViewDataErrorEventArgs) Handles DGV_APO.DataError
e.ThrowException = False
End Sub
Итак, что я делаю неправильно? Любая помощь оценивается.
спасибо за отзыв, но это была просто ошибка, сделанная здесь во время публикации. Мое выступление находится внутри оператора If. Я снова редактировал вопрос. И код тоже не работает. – LuckyLuke82
Остальная часть ответа по-прежнему верна. После того, как вы попадете в оператор IF, он закончит суб, что означает, что любой код после цикла не будет запущен. – MaCron