Вот проблема:
У меня есть сетка данных, привязанная к пустому набору данных (обычно, если заказы не были завершены с последнего сеанса).Пользовательские ключи в jobNumber и deliveryDate попадают в первые 2 столбца, а затем, если у них есть настраиваемый адрес электронной почты, который необходимо использовать, они могут выбрать его в выпадающем списке (заполненном ранее использованными адресами в formLoad) или набрать новое письмо, еслиего не существуетПроблема в том, что если введенное электронное письмо не совпадает с адресом в списке, то оно удаляется на вкладке.
Я пробовал несколько разных вещей, чтобы получить доступ к показанному (набранному пользователем) значению, прежде чем оно будет стерто коммитом, но, похоже, не могу найти способ.Моя работа вокруг, как показано ниже ... Я в основном фиксирую нажатия клавиш в комбинированном ящике с помощью специального обработчика.Затем я добавляю его в список выпадающих списков и выбираю это значение.Работает нормально, но может запутаться в зависимости от того, как вы получаете доступ к списку.
Есть какие-нибудь мысли о попытке перехватить всю строку, введенную пользователем, до ее удаления коммитом?
Private Sub dGrid1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles dGrid1.EditingControlShowing
If TypeOf e.Control Is DataGridViewComboBoxEditingControl Then
RemoveHandler e.Control.KeyDown, AddressOf cBox_KeyDown
CType(e.Control, ComboBox).DropDownStyle = ComboBoxStyle.DropDown
CType(e.Control, ComboBox).AutoCompleteSource = AutoCompleteSource.ListItems
CType(e.Control, ComboBox).AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest
holdThis = ""
AddHandler e.Control.KeyDown, AddressOf cBox_KeyDown
End If
End Sub
Private Sub cBox_KeyDown(sender As Object, e As KeyEventArgs)
If e.KeyCode = Keys.Space Then
e.SuppressKeyPress = True
holdThis = holdThis.Substring(1)
Dim cBoxCol As DataGridViewComboBoxColumn
cBoxCol = dGrid1.Columns.Item(3)
cBoxCol.Items.Add(holdThis)
cBoxCol = dGrid1.Columns.Item(4)
cBoxCol.Items.Add(holdThis)
dGrid1.CurrentCell.Value = holdThis
Dim iCol = dGrid1.CurrentCell.ColumnIndex
Dim iRow = dGrid1.CurrentCell.RowIndex
If iCol = dGrid1.Columns.Count - 1 Then
If iRow < dGrid1.Rows.Count - 1 Then
dGrid1.CurrentCell = dGrid1(0, iRow + 1)
End If
Else
dGrid1.CurrentCell = dGrid1(iCol + 1, iRow)
End If
holdThis = ""
Else
If e.KeyCode = Keys.Back Then
holdThis = Strings.Left(holdThis, holdThis.Length - 1)
ElseIf e.KeyCode = Keys.ShiftKey And Keys.D2 Then
holdThis = holdThis & "@"
ElseIf e.KeyCode = Keys.OemPeriod Then
holdThis = holdThis & "."
Else
If holdThis.Length > 1 Then
If holdThis(holdThis.Length - 1) = "2" Then
holdThis = Strings.Left(holdThis, holdThis.Length - 1)
End If
End If
holdThis = holdThis & Chr(e.KeyValue)
End If
End If
End Sub