Hay que tener en cuenta que para utilizar esta opción, debes asignar las siguientes propiedades: AutoCompleteMode: que sirve para indicar cómo queremos que se muestren los datos que encuentra mientras se escribe en el control. AutoCompleteSource: que sirve para indicarle de dónde se obtendrán los datos que se usarán mientras se escribe. En este ejemplo se utiliza AutoCompleteSource asignado a CustomSource debido a que la fuente de datos la obtenemos desde una ruta personalizada. En el evento Load del formulario, se llama a la función AutoCompletar como se muestra debajo, asignándole el control TextBox. Elementos de importacion: Imports System.Data.SqlClient Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load AutoCompletar(Me.TextBox1) End Sub Esta es la función AutoCompletar que se deberá utilizar asignándole el control TextBox. Public Function AutoCompletar(ByVal Control As TextBox) As AutoCompleteStringCollection Dim Coleccion As New AutoCompleteStringCollection Dim Comando As String Comando = "SELECT Nombre FROM Clientes ORDER By Nombre" 'Creamos una nueva cadena de coneccion Using Coneccion As New SqlConnection(My.Settings.Coneccion) Dim Ejecutar As New SqlClient.SqlCommand(Comando, Coneccion) 'Abrimos la coneccion Coneccion.Open() Dim Lector As SqlDataReader = Ejecutar.ExecuteReader() ' Realizamos un Loop mientras se est leyendo. While Lector.Read() Coleccion.AddRange(New String() {Lector(0)}) End While 'Cerramos el SqlReader Lector.Close() 'Cerramos la coneccion Coneccion.Close() End Using 'Ajustamos el control TextBox o ComboBox para recibir los datos de la siguiente manera. With Control .AutoCompleteMode = AutoCompleteMode.Suggest .AutoCompleteSource = AutoCompleteSource.CustomSource .AutoCompleteCustomSource = Coleccion End With 'Devolvemos los datos recuperados de la base de datos Return Coleccion End Function |
lunes, 1 de febrero de 2010
AutoCompletar TextBox desde base de datos
Suscribirse a:
Enviar comentarios (Atom)
excelente aporte amnigo
ResponderEliminarahora si pudieras poner un ejemplo de busqueda pero que busque en cualquier posicion osea si pongo juan y el sujeto se llama jose juan lo encuentre o lo desplege
muy bueno, excelente gracias por compartir me funcionó correctamente, lo con bd acces.
ResponderEliminartengo visual net 2005 y me tira un error en esta linea My.Settings.Coneccion) , me dice que
ResponderEliminarError 1 'coleccion' no es un miembro de 'WindowsApplication2.My.MySettings'. tenes idea de por que puede ser?
Rspta: Creaste tu cadena de conexion alli no lo especifique perdon por la omision
ResponderEliminarperdon por la ignorancia pero no entiendo lo que me queres decir
ResponderEliminaro sea cual es la solucion, se me esta quemadno la cabeza perdon si la pregunta es muy tarada. Yo pense que al ser una base de datos creada en acces quiza ese era el problema
ResponderEliminarMe refiero a q si haz creado una cadena de conexion para tu base de datos en tu caso con access seria algo asi
ResponderEliminarImports System.Data.OleDb
//cambias la primera linea por la que en mi caso
puse imports system.data.sqlclient
luego vas a crear la sgte cadena de conexion
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\PRODELAC.mdb"
me disculpo por no explicarte muy bien en este momento ya q ahora estoy algo ocupado si esperas mañana a primera hora encontraras una solucion para tu caso de access. Estoy en una reunión
seria la ruta de donde esta almacenada mi base de datos?
ResponderEliminarups perdon, no jodo mas. gracias por el aporte
ResponderEliminarrealiza varios cambios el primero de la primera linea:
ResponderEliminarImports System.Data.OleDb
y el segundo cambio seria la linea q dice
using conexion ...
por esto
Conexion = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=el nombre de la ruta de tu bd en access "
Coneccion = New OleDbConnection(Conexion)
tercer cambio
dim ejecutar as ...
dim ejecutar as new oledbcommandbuilder (Comando,coneccion)
ultimo cambio en dim lector as ...
ResponderEliminarcambio por
dim lector as OleDBDataReader = ejecutar.ExecuteReader()
y me dices si eso soluciona tu problema espero no haberme equivocado con lo apurado q escirbo jejeje
Hola nuevamente yo, la verdad que no anda no se que mas hacerle. te pego el codigo....
ResponderEliminarDim Coleccion As New AutoCompleteStringCollection
Dim Comando As String
Comando = "SELECT Nombre FROM Clientes ORDER By Nombre"
'Creamos una nueva cadena de coneccion
Dim ubicacion As String
ubicacion = Application.StartupPath
Dim conexion As String = "Data Source =" & ubicacion & "\PRUEBA.mdb"
conexion &= ";Provider = microsoft.Jet.Oledb.4.0;"
Dim Coneccion As OleDb.OleDbConnection = New OleDbConnection(conexion)
Dim ejecutar As New OleDbCommandBuilder(Comando, Coneccion)
'Abrimos la coneccion
Coneccion.Open()
Dim lector As OleDbDataReader = ejecutar.ExecuteReader()
' Realizamos un Loop mientras se est‚ leyendo.
While Lector.Read()
Coleccion.AddRange(New String() {Lector(0)})
End While
'Cerramos el SqlReader
Lector.Close()
'Cerramos la coneccion
Coneccion.Close()
'Ajustamos el control TextBox o ComboBox para recibir los datos de la siguiente manera.
With Control
.AutoCompleteMode = AutoCompleteMode.Suggest
.AutoCompleteSource = AutoCompleteSource.CustomSource
.AutoCompleteCustomSource = Coleccion
End With
'Devolvemos los datos recuperados de la base de datos
Return Coleccion()
me tira error en dim ejecutar..... me dice(error de sobrecarga por que ninguna de las funciones new acepta este argumento..
ResponderEliminarejecutar.executereader()....me dice(no es un miembrode system.data.oledb.oledbcommandbuilder}
return collecion()...me dice(no se ha especificado ningun argumento para el parametro index
nuevamente perdon pero ya me saturo tdoo esto
Hazlo asi y avisame q fue
ResponderEliminarImports System.Data.OleDb
Private Sub
Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AutoCompletar(Me.TextBox1)
End Sub
Esta es la función AutoCompletar que se deberá utilizar asignándole el control TextBox.
Public Function AutoCompletar(ByVal Control As TextBox) As AutoCompleteStringCollection
Dim Coleccion As New AutoCompleteStringCollection
Dim Comando As String
Comando = "SELECT Nombre FROM Clientes ORDER By Nombre"
'Creamos una nueva cadena de coneccion
Conexion = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=el nombre de la ruta de tu bd en access "
Coneccion = New OleDbConnection(Conexion)
Dim Ejecutar As New OleDbCommand(Comando, Coneccion)
'Abrimos la coneccion
Coneccion.Open()
Dim Lector As OleDbDataReader = Ejecutar.ExecuteReader()
' Realizamos un Loop mientras se est‚ leyendo.
While
Lector.Read()
Coleccion.AddRange(New String()
{Lector(0)})
End While
'Cerramos el SqlReader
Lector.Close()
'Cerramos la coneccion
Coneccion.Close()
End Using
'Ajustamos el control TextBox o ComboBox para recibir los datos de la siguiente manera.
With Control
.AutoCompleteMode = AutoCompleteMode.Suggest
.AutoCompleteSource = AutoCompleteSource.CustomSource
.AutoCompleteCustomSource = Coleccion
End With
'Devolvemos los datos recuperados de la base de datos
Return
Coleccion
End Function
'Ajustamos el control TextBox o ComboBox para recibir los datos de la siguiente manera.
With Control
.AutoCompleteMode = AutoCompleteMode.Suggest
.AutoCompleteSource = AutoCompleteSource.CustomSource
.AutoCompleteCustomSource = Coleccion
End With
'Devolvemos los datos recuperados de la base de datos
Return Coleccion()
ME TIRA UN ERROR EN EL RETURN, ME DICE QUE NO SE ESPECIFICO NINGUN ARGUMENTO PARA EL PARAMETRO PARA EL INDEX
ResponderEliminarok ya revise el codigo y vi tu error elimina los parentesis q te sales en return coleccion y algo mas en la propiedad autocompletesource del textbox cambiala a customsource y eso debe hacer q te corra el programa
ResponderEliminarmuy chido gracias!!! salu2 desde Durango mexico
ResponderEliminarPURO DURANGO!!!!
Buneas Tardes a todos,
ResponderEliminarImposible en Access, no consigo que funcione...
Alguién sabe algo???
Gracias.
Hola Hermano , Excelente codigo ,pero si quisiera usarlo para todos los campos de mi formulario, como hago porque seria un tedio hacerlo para cada uno de los texto Box.
ResponderEliminarEn visual Basic 6.0 lo hacia pero en el evento Change de cada Text Box pero esto no resulta Con la propiedad collection
ResponderEliminarDisculpa por la pregunta
graxx si sirve...
ResponderEliminarGRACIAS QUE BUEN APORTE MUY SIMPLE Y SE ENTIENDE A LA PERFECCION
ResponderEliminarSALUDOS