Vamos a concentrarnos por partes.
En el primer método (trata de usar los bbcode provistos por FDW, así el texto es más claro), es mejor que el proceso quede completamente separado de la declaración de las variables, de modo de evitar problemas con su ambiente.
Pero además es conveniente que
antes de ponerte a borrar el ComboBox o cargarlo, te asegures que haya algo que cargar.
Código vb.net:
Ver originalPrivate Sub cbbApellidos_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles cbbApellidos.KeyPress
Dim lector As New SqlDataReader
Dim comando As New SqlCommand
Try
'Abrir_Conexion()
conexion.Open()
comando = New SqlCommand("SELECT Nombre_cliente,Apellidos_cliente FROM clientes WHERE Apellidos_cliente like '" & cbbApellidos.Text & "%'", conexion)
lector = comando.ExecuteReader
If lector.Item.Count > 0 Then
Me.cbbApellidos.Items.Clear()
Me.cbbApellidos.DroppedDown = True
Do While lector.Read
Me.cbbApellidos.Items.Add(lector("Apellidos_client e") & ", " & lector("Nombre_cliente"))
Loop
End If
Cerrar_Conexion()
Me.cbbApellidos.SelectionStart = Len(cbbApellidos.Text)
Catch ex As Exception
MsgBox(ex
.Message, MsgBoxStyle
.Critical,
"ERROR") End Try
End Sub
Respecto al segundo método, no hay mucho por decir, porque lo que buscas es suplir una propiedad que el ComboBox no tiene. Es una forma de hacerlo.
Pero el tercero me parece discutible por varias razones:
- Se supone que deberías usar a las propiedades SelectedItem o SeletedIndex para obtener los valores a buscar, pero en lugar de eso, quieres usar el Text ya ingresado, que en el evento ya ha dejado de existir. Es más simple usar el SelectedItem, que tiene un
valor existente, por lo que es innecesario buscarlo otra vez.
- Cargas una tabla con los datos necesarios y luego vuelves a buscar en la base otro dato... ¿No sería más sencillo usar lo que ya tienes?
- La búsqueda en sí, en el evento de
SelectedIndexChanged es rendundante, porque ya lo estás haciendo en
KeyPress. Se supone que ya están los valores que se aproximan, por lo cual nunca debería darte la posibilidad de seleccionar algo que no exista. De lo contrario, el valor de SelectedIndex daría -1 (y no 0).
Yo trataría de plantear el método de nuevo desde cero. Me parece que se puede hacer más eficiente.