Ver Mensaje Individual
  #6 (permalink)  
Antiguo 23/02/2010, 18:21
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: problema con el selectedindexchanged

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 original
  1. Private Sub cbbApellidos_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles cbbApellidos.KeyPress
  2.         Dim lector As New SqlDataReader
  3.         Dim comando As New SqlCommand
  4.         Try
  5.             'Abrir_Conexion()
  6.             conexion.Open()
  7.             comando = New SqlCommand("SELECT Nombre_cliente,Apellidos_cliente FROM clientes WHERE Apellidos_cliente like '" & cbbApellidos.Text & "%'", conexion)
  8.             lector = comando.ExecuteReader
  9.             If lector.Item.Count > 0 Then
  10.                 Me.cbbApellidos.Items.Clear()
  11.                 Me.cbbApellidos.DroppedDown = True
  12.                 Do While lector.Read
  13.                     Me.cbbApellidos.Items.Add(lector("Apellidos_client e") & ", " & lector("Nombre_cliente"))
  14.                 Loop
  15.             End If
  16.             lector.Close()
  17.             Cerrar_Conexion()
  18.             Me.cbbApellidos.SelectionStart = Len(cbbApellidos.Text)
  19.         Catch ex As Exception
  20.             MsgBox(ex.Message, MsgBoxStyle.Critical, "ERROR")
  21.         End Try
  22.     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.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)