Introducción
Muchas veces es necesario exponer al usuario herramientas de búsqueda que le faciliten la interacción con la aplicación que desarrollamos.
Una de estas herramientas es precisamente el AutoComplete, por el cual el usuario podrá ir visualizando los ítems existentes a medida que se escribe en un control.
TextBox AutoComplete
Hacer uso de las opciones de autocomplete de estos controles es bastante simple, solo hace falta especificar un par de propiedades, pero hay que tener en cuenta algunos puntos.
Estas propiedades son:
textBox1.AutoCompleteCustomSource = DataHelper.LoadAutoComplete(); textBox1.AutoCompleteMode = AutoCompleteMode.Suggest; textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
En el ejemplo se visualiza como asignar estas propiedades, pero debe prestarse atención a la propiedad “AutoCompleteCustomSource” esta es clave, pues contendrá la lista de ítems.
Esta propiedad es justamente uno de los puntos a tener en cuenta, ya que requiere cargar una lista de ítems que provenga de una colección del tipo “AutoCompleteStringCollection”
Es por ello que en el ejemplo se visualiza la generación de los datos que cargaran esta colección
public static AutoCompleteStringCollection LoadAutoComplete() { DataTable dt = LoadDataTable(); AutoCompleteStringCollection stringCol = new AutoCompleteStringCollection(); foreach (DataRow row in dt.Rows) { stringCol.Add(Convert.ToString(row["Nombre"])); } return stringCol; }
El código es bastante simple de entender, se obtiene los datos desde la db y como siguiente paso los recorre cargando la lista de ítems del autocomplete.
ComboBox AutoComplete
La utilización de las opciones de autocomplete de un control Combobox son idénticas a las de un TextBox, solo difiere en que el combo requiere cargar sus ítems previamente para la selección por parte del usuario.
O sea el combobox requiere dos listas para bindear
- una normal que se asignara al DataSource, y en donde se especificara tanto el valor a desplegar como el valor de la key
- una especial con la lista de descripciones para el autocomplete
// // Cargo los datos del combobox // comboBox1.DataSource = DataHelper.LoadDataTable(); comboBox1.DisplayMember = "Nombre"; comboBox1.ValueMember = "Id"; // // cargo la lista de items para el autocomplete // comboBox1.AutoCompleteCustomSource = DataHelper.LoadAutoComplete(); comboBox1.AutoCompleteMode = AutoCompleteMode.Suggest; comboBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
Conclusión
El autocomplete es una excelente opción para ayudar al usuario en la interacción con la aplicación brindándole un fácil acceso mientras escribe la búsqueda.
[C#] |
[VB.NET] |
Gracias! Estaba buscando algo así!
ResponderEliminarHola Leandro, tenés autocomplete combo box en datagridview?
ResponderEliminarcon esta funcion del autocompletado no funcionan los eventos keypress down o up simplemente selecciona el texto al dar enter y no hace nada, me podrian ayudar a que se auto omplete y que entre al evento keypress
ResponderEliminarhola
ResponderEliminarCon respecto al keypress, he realizado algunas pruebas y puede notar que el evento funciona perfectamente.
En el ejemplo que use detecto la presion de la tecla "a", con este codigo:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 'a')
MessageBox.Show("se presiono A");
}
lanzara un mensaje y lo hizo sin problemas.
Por ahi habria que verificar si el handler del evento esta bien asignado.
Para esto selecciona el textbox, presiona F4, con esto veras la propiedades del control, luego en el "Solution Explorer" presiona en al icono de forma de rayo color amarillo, con esto veras los eventos, bien alli busca el keypress, y valida que tenga algun metodo del evento asignado.
Sino hay nada entonces esa es la causa por la cual no funciona, es que no estab asociado el handler del evento
saludos
hola necesito saber como hago para vaciar los textbox cuando están en modo auto completar, por ejemplo si quiero con un botón reiniciarlos a todos.
EliminarDel modo tradicional seria textbox1.text=" ", pero cuando tienen el auto completar no logro hacerlo me interesaría si me ayudan.
Hola,
ResponderEliminarHe observado que si seteamos las propiedades de autocomplete como custom....
y cargando mi propia AutoCompleteCustomSource... siempre me sugiere
elementos de la lista que comienzan con el texto que voy ingresando.. por
ejemplo
si ingreso "Buen"
me va sugiriendo "Buen Dia" "Buenas Noches" "Buenos Aires"
es decir va mostrando las opciones que comienzan con lo ingresado.....
Pero, yo quisiera.. que me muestre todas las opciones que por lo menos
contengan lo que voy ingresando..
por ejemplo:
si ingreso "Bue"
me deberìa mostrar: "Buen Dia" "Capital Buenos Aires" "Buenas Noches" "Mi
viaje Bueno"
Sin embargo, el comportamiento es como yo busco, cuando AutoCompleteSource
se establece en AllUrl....
si ingreso por ejemplo Goo me aparece http://www.google.com.ar
Pero claro.. con este seteo la lista no es la que necesito...
alguien conoce la manera de realizarlo?
Muchas Gracias
Gaston, que tal
ResponderEliminarEstuve viendo el tema que planteas, y no tengo buenas noticias, lamentablemente la funcionalidad que viene por defecto en el autocomplete no contempla la posibilidad de buscar en cualquier parte del texto.
Es mas lo que has sugerido con el uso del AutoCompleteSource = AllUrl, tampoco funciona como lo describes. Has una prueba, en lugar de tipear goo, tipea gle, o se la parte final de la palabra, veras que no encuentra ningun resultado, bien lo que sucede es que en la busqueda como sabe que es una url, descarta el http://, pero despues solo muestra aquellos que inicien con lo tipeado.
Por ahi podrias implementar lo que sugiere este link:
AutoComplete c#
como veras usa un textbox y un listbox para mostrarlo u ocultarlo segun la busqueda, pero lo interesante es que usa la linea:
if (s.Contains(textBox1.Text))
El Contains() devuelve si en cualquier parte del texto se encuentra el texto a buscar.
Se que no es lo mejor, pero seria una solucion que si funciona.
saludos
Hola Leandro, como puedo asignar un valor a un combobox cargado con una lista de Entidades, el select value no me funciona por favor solicito tu ayuda.
EliminarDe antemano muchas gracias!!
Leandro, muchas gracias por tu pronta respuesta.
ResponderEliminarEfectivamente, no creo que tenga muchas mas posibilidades que crear un usercontrol que contenga un textbox y un listbox como para "simular" el autocomplete
He tratado de realizar este usercontrol, pero sigo con los problemas :)...
En este control agreguè el textbox, y despues analizando el texchange...
creo en tiempo de ejecucion el listbox, y lo pongo debajo.. simulando... el autocomplete...
ahora bien......
este usercontrol tiene que tener de alto, ademas de la altura del textbox... la altura del "futuro" listbox que se crearà
entonces me queda INMENSO..
si solo pongo el tamaño del alto del textbox, no se muestra el listbox...
si tienes alguna idea te la agradecerìa. Gracias de nuevo
un saludo
Muy Buen Ejemplo Leandro
ResponderEliminarMuy buen aporte el de aqui, muchas gracias :). Tambien queria agradecerte por este proyecto personal el que tienes, espero siga asi; ah! y me olvidaba acabo de leer tu MVP felicitaciones :D!!! yo ni sabia que existia una mension tan importante. Saludos
ResponderEliminarPD: Estoy buscando el suscribirme pero no lo encuentro :S
hola areseo
ResponderEliminarQue bueno que resulte util, me alegro
Habilite en la barra derecha la opcion de seguimiento
saludos
Hola leandro, tengo una duda,..cómo puedo seleccionar de la lista de sugerencias del autocomplete con la tecla direccional de abajo.. esq cuando le doy me selecciona por defecto la primera sugerencia. p ejemplo:
ResponderEliminarAl escribir jose
me dan resultados de autocomplete:
jose carlos
jose maria
jose mouriño
etc.
yo quisiera seleccionar el de jose mouriño con la tecla direccional de abajo, cómo lo haria sin escribir todo el texto
hola Juan Carlos
ResponderEliminarNo has probado presionar en repetidad veces la flecha hacia abajo del teclado (esto seria cuando se desplegan las opciones), no esto 100% seguro pero creo que si lo haces ira seleccionado los item de la lista del autocomplete
saludos
¿Y si quisiera que no solo me mostrará el nombre sino tambien el apellido?
ResponderEliminarhola David
ResponderEliminarLo que podrias hacer en ese caso es directo en la query que usas para cargar la info, unir los dos campos
o sea usar
SELECT Nombre + ' ' + Apellido As NombreCompleto FROM NombreTabla
como veras ahora usarias el campo "NombreCompleto" para el autocomplete
saludos
Hola Leandro, revisé el código tuyo y al ejecutar me sucede lo mi mismo que mi comentario en http://social.msdn.microsoft.com/Forums/es-ES/vbes/thread/39c0d9c1-8d7a-47da-be3f-6ddecf4b9d2f
ResponderEliminarAgradeceré de tu ayuda.
Saludos
MG
hola Marzo
ResponderEliminarImagino te refieres a la busqueda en cualqueir parte del texto, si es eso seguro sucedera porque la implementacion de la busqueda es de esta forma por como viene implementada en el control.
Salvo que desarrolles tu propio control (que quizas herede de un textbox) y que aplique el autcomplete custom, no veo como de forma nativa por como viene el control se podria aplciar este tipo de busqueda.
saludos
muchas gracias me ha servido de mucho..!!
ResponderEliminarhola leandro disculpa quisiera saber si en vez de utilizar un datatable puedo utilizar un dataset? me imagino que el codigo cambiaria un poco no? de antemano muxas gracias
ResponderEliminarhola Pakito1090
ResponderEliminarpero si solo vas a obtener informacion de una unica tabla que sentido tendria cargar un dataset ?
la tecnica es la misma puede cargar el dataset, solo que despues deberias usar
Dim dt As DataTable = ds.Tables(0)
o sea obtieness el datatable del dataset, por eso digo que no tiene sentido usarlo en este caso
saludos
Hola Leandro.
ResponderEliminarLo primero agradecerte este artículo. Me ha sido de gran ayuda y era justo lo que estaba buscando.
Yo, al igual que preguntaba David el pasado 9 de Marzo de 2011, quiero sacar 2 campos en el autocomplete, pero que cuando seleccione el valor que quiero de la lista, solo me recoja uno de los dos campos. Es decir, yo monto la consulta para que me aparezca: codarticulo + nomarticulo. Pero cuando escojo el valor que quiero que solo me aparezca en el textbox el valor de codarticulo.
¿Sabrías como podría hacer esto?
Muchas gracias por tus artículos.
Un saludo.
hola Quique
ResponderEliminarusando el control estandar que incluye .net no creo que exista la posibilidad de plantear una busqueda de esta form
no has evaluado quizas usar un combobox, que tambien tiene autocomplete ? este si tiene un ValueMember que retornaria un valor diferente al visualizado
saludos
hola Lenadro podrias ayudarme con lo siguiente:
ResponderEliminartengo esto...
//COMBO DE PRODUCTO
comboPro.DisplayMember = "des_prod";
comboPro.DataSource = productoBindingSource;
comboPro.ValueMember = "cod_prod";
cargo datos de la tabla producto y muestro en mi formulario el nombre del producto para que el usuario seleccione, este combo pertenece a un formulario de factura, al querer guardar el cod del producto a mi tabla de detalle de factura no lo puedo hacer.
yo agrego datos a las tablas con el INNER JOIN, y luego uso el sigte codigo:
EJEMPLO1
comando.Parameters.AddWithValue("@totalitem", total);
AHORA EL CODIGO DE PRODUCTO LO QUIERO HACER ASI comando.Parameters.AddWithValue("@cod_prod_fact", ??? AQUI DEBO PONERLO);
Como extraigo el cod de prod del productoBindingSource ? obviamente q coincida con la descripcion de producto seleccionada
quedo a espera de tus sugerencias, por favor ayudame
mil gracias
Saludos¡¡
hola VADA
ResponderEliminary si haces
comando.Parameters.AddWithValue("@cod_prod_fact", Convert.ToInt32(comboPro.SelectedValue));
como veras recuperas la seleccion del combo no del datasource
saludos
Gracias men justo lo que anda buscando.. (y)
ResponderEliminarGracias, tenias toda la razon tu solucion me dio resultado =), si necesito algo mas te buscare.
ResponderEliminarAyudame con algo mas por favor
ResponderEliminartengo esto:
private void comboHistorial_SelectedIndexChanged(object sender, EventArgs e)
{
string codclie;
codclie = Convert.ToString(comboHistorial.SelectedValue);
SqlConnection conexlinksat = new SqlConnection();
conexlinksat.ConnectionString = @"Data Source=.;Initial Catalog=ventas;Integrated Security=True";
SqlCommand comandolinksat = new SqlCommand("select cab_factura.num_fact,fec_fact,fec_venc,gui_remi,des_fact,tot_gen_fact,for_pag_fact,vend_fact from cliente inner join cab_factura on cliente.id_clien = cab_factura.id_clien_fact inner join deta_factura on cab_factura.num_fact = deta_factura.num_fact inner join prod_factura on prod_factura.num_fact = deta_factura.num_fact WHERE cliente.id_clien='" + codclie + "'", conexlinksat);
comandolinksat.Parameters.AddWithValue("@codclie", codclie);
SqlDataAdapter MiDataAd = new SqlDataAdapter(comandolinksat);
DataTable Midatatable = new DataTable();
MiDataAd.Fill(Midatatable);
dataGridHistorial.DataSource = Midatatable;
}
quiero seleccionar un cliente de un combobox y mostrar todo lo que esta en mi select. Como hago para cargar los datos al grid???
ya no es necesario lo resolvi con este codigo
ResponderEliminarprivate void comboHistorial_SelectedIndexChanged(object sender, EventArgs e)
{
SqlConnection conexlinksat = new SqlConnection();
conexlinksat.ConnectionString = @"Data Source=.;Initial Catalog=ventas;Integrated Security=True";
SqlCommand comandolinksat = new SqlCommand("select cab_factura.num_fact,fec_fact,fec_venc,gui_remi,des_fact,tot_gen_fact,for_pag_fact,vend_fact from cliente inner join cab_factura on cliente.id_clien = cab_factura.id_clien_fact inner join deta_factura on cab_factura.num_fact = deta_factura.num_fact inner join prod_factura on prod_factura.num_fact = deta_factura.num_fact WHERE cliente.raz_soc_clien='" + comboHistorial.Text + "'", conexlinksat);
SqlDataAdapter MiDataAd = new SqlDataAdapter(comandolinksat);
DataTable Midatatable = new DataTable();
MiDataAd.Fill(Midatatable);
dataGridHistorial.DataSource = Midatatable;
conexlinksat.Open();
comandolinksat.ExecuteNonQuery();
conexlinksat.Close();
}
estaba agregando codclie sin necesidad...
Gracias igual
hola VADA
ResponderEliminarmas alla que hayas solucionado el problema dos comentarios
- no uses del combo el evento SelectedIndexChanged, usa el SelectionChangeCommited, ya que el primero se dispara ante cualqueir cambio, mientras que el segundo solo si es un cambio generado por el usuario al seleccionar un item
esto puede evitarte miles de problemas
- segundo usa paramtros en tu query, no concatenes el string, no uses esto
WHERE cliente.raz_soc_clien='" + comboHistorial.Text + "'", conexlinksat);
usa
WHERE cliente.raz_soc_clien=@razsoc", conexlinksat);
comandolinksat.Paraemters.AddWithValue("@razsoc", comboHistorial.Text)
como vers usas la coleccion parameters del command para asignar el valor
saludos
Hola Leandro
ResponderEliminarbueno si tengo problemas con el SelectedIndexChanged al iniciar el form se cargan datos del 1er cliente en el grid, pero si deseo ver datos de otro cliente me los carga sin ningun problema; en cambio si uso el SelectionChangeCommited al iniciar el form no hay datos en el grid(problema resuelto con respecto a SelectedIndexChanged)pero si quiero seleccionar otro cliente me carga inicialmente 0 luego le doy otro click y cargan los datos, ahora quiero otro cliente doy click y no se borran del grid los datos del cliente anterior doy otro click y ahi me muestra los datos; como entenderas debo seleccionar 2 veces a un cliente para q me cargue datos al grid, uso dataGridHistorial.Rows.Clear(); para borrar y da errores o tambien uso dataGridHistorial.SeletedClear(); y tambien...
si me puedes ayudar con esto t lo agradezco mucho...
Saludos Cordiales
Verónica
hola VADA
ResponderEliminarclaro pero es que cuando suas el SelectionChangeCommited tu controlas cuando quiers que sucan las cosas, por eso si al inicio no se ejecuta la primer accion tu la invocas
se supone que tienes un metodo comun que puedes invocar para cargar, imagina no tienes todo el codigo peusto en el metodo de un evento, cosa que puedas invocarlo ya que con el SelectionChangeCommited no se realiza solo y eso es lo bueno, tu lo controlas
analiza como lo hago aqui
[WinForms] ComboBox Anidados
saludos
he tomado este codigo que funciona de marivilla pero cuando se trata de pocos registros, sin embargo yo hago el autocompletar de una tabla que contiene alrededor de 150mil registros y me demora 4 minutos cargar el autocomplete. existe alguna forma de reducir esa exagerada cantidad de tiempo que como todos sabemos aqui significa que lo primero que diran los demas es que la aplicacion NO SIRVE
ResponderEliminarhola alexis
ResponderEliminarhasta dodne se en este tipo de autocomple que proporciona los controles no se puede realizar una carga bajo demanda
el textbox deba contar con la totalidad de los items que puede usar para resolver
no lo he probado, pero quizas si en el evento keypress vas cambiando el AutoCompleteCustomSource
filtrando por lo que se escribe, podrias ir tomando de a poco la sugerencia y no tener que cargarla completa
igual te comento no lo he intentado solo es una idea
saludos
He tomado tu ejemplo y funciona de maravilla el autocomplete, pero para pocos registros.. Me sucede lo siguiente en una pantalla winform. Al iniciar, caraga rapidisimo unos 6,000 registros.. Pero necesito q al guardar datos en esa pantalla, el autocomplete se actualize.. x lo q llamo d vuelta al proceso que carga el textbox. pero ahi se demora unos 2 min para cargarlos. Quizas hay q liberar o limpiar variables pero no puedo darle aun..
ResponderEliminareste es mi codigo
public void CargarAutoCompleteClienteDocumento()
{
try
{
SqlDataReader dReader;
Cliente oC = new Cliente();
docusCollection.Clear();
txtIdentificacion.AutoCompleteCustomSource.Clear();
dReader = oC.GetClienteDocumentoAutoComplete();
if (dReader.HasRows == true)
{
while (dReader.Read())
docusCollection.Add(dReader["sTipoIdentificacion"].ToString());
}
else
{
docusCollection.Add("");
}
dReader.Close();
txtIdentificacion.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
txtIdentificacion.AutoCompleteSource = AutoCompleteSource.CustomSource;
txtIdentificacion.AutoCompleteCustomSource = docusCollection;
}
catch (Exception ex)
{
}
}
hola Leando una ultima consulta, cuando escribo en el autocomplete y encuentro la sugerencia, si le doy click a la sugerencia el evento SelectionChangeComitted no hace nada de lo que le programe, pero si busco directamente en el combobox y le doy click ahi si se dispara el evento.
ResponderEliminarcomo hago en este caso?? porque la idea es escribir y me bote la sugerencia no abrir el combobox y seleccionarla
ayuda porfavor
hola alexis
ResponderEliminarsi lo que planteas no lo veo tan directo como parece, mas que nada porque la funcionalidad no lo implementa de esta forma
no ahs probado en este caso si usar el SelectedIndexChanged
o sino evaluar algun control textbox de terceros que si permita la busqueda con carga asincrona
saludos
hola AlejandroAM
ResponderEliminarcuando agregas un item y quieres que se actualice, no has evaluado no recargar la lista de autocomplete sino solo agregar un item a la misma
con esto evitarias tener que recargar tantos registros para la busqueda, cuando se crea un item lo agregas a la coleccion en lugar de recargar
saludos
HOLA lEANDRO UNA CONSULTA, SI DESEO TRABAJAR CON WEB SERVICE, DESEARIA LLENAR UN TEXTBOX EN BASE A LA SELECCION DE UN COMBO POR EJEMPLO
ResponderEliminarSI MI COMBO TENGO--> ALIMENTOS, INFORMATICOS, ETC
SI SELECCIONO ALIMENTOS, EN MI TEXTBOX CUANDO ESCRIBA LA LETRA M ME TIENE Q MOSTRAR COMO UNA LISTA DESPLEGABLE TODO LOS PRODUCTOS Q PERTENECEN A ESE GRUPO CON LA LETRA M ... COMO LO HARIA PORFAVOR ESPERO TU GRAN APORTE
hola leandro he probado con el SelectedIndexChanged y lo mismo que con el otro pero con lo molesto de que cada vez que cargo el form se lanza ese evento :D
ResponderEliminarEsta forma de de buscar mientras se escribe tiene limitaciones? Ósea, que tal si la tabla tiene un millón de registro? Funciona bien? O es solo para tablas con pocos registros. Disculpa, en verdad soy nuevo en esto.
ResponderEliminarhola MiAulaVirual
ResponderEliminarlimitaciones tiene, como ser el caso que solo busca por las primeras letras, ademas que no siempre realiza las busquedas con todo lo que se escribe sino con la ultima letra pulsada, si se escribe AL, buscara con L (la ultima tecla pulsada), y no con AL o sea las dos letras
no lo he probado con 1 millon de registros pero imagino que el problema aqui no seria la busqueda en si mismo, sino el proceso que cargaria los datos
saludos
Hola Leandro , tengo un combo el cual tiene las dos propiedades activadas "AutoCompleteMode" y "AutoCompleteSource", se carga con un Procedimiento Almacenado.
ResponderEliminarejemplo : en mi combo tengo los items "DONAS RELLENAS" Y "DONAS FRESA".
cuando escribo la primera letra que en este caso es "D" me muestra todas las palabras que empiezan con dicha letra , ahora lo que necesito es que al escribir D espacio y la primera letra de la segunda palabra que en este caso puede ser R o F para ser mas especifico, se mantenga aun los resultados de la busqueda.
ejemplo : D R
y tiene que aparecer DONAS RELLENAS.
mi SP es el siguiente:
create procedure USP_COMBOS
@Opcion varchar(2)="",
@valor01 varchar(100)="",
@valor02 varchar(100)=""
as
select IdProducto,(Producto_Nombre +' '+Descripcion) as Productos
from Producto_Terminado
where Producto_Nombre like '%' + @valor01 + '%' and Descripcion like '%' + @valor02 + '%'
order by 1 asc
mi funcion:
Public Function getCombos(ByVal Opcion As String, ByVal Valor01 As String, ByVal Valor02 As String) As DataTable
Try
Dim con As New SqlConnection(conex)
Dim dap As New SqlDataAdapter("USP_COMBOS", con)
Dim dst As New DataSet
With dap.SelectCommand
.CommandType = CommandType.StoredProcedure
.Parameters.Add(New SqlParameter("@Opcion", SqlDbType.VarChar, 2)).Value = Opcion
.Parameters.Add(New SqlParameter("@valor01", SqlDbType.VarChar)).Value = Valor01
.Parameters.Add(New SqlParameter("@valor02", SqlDbType.VarChar)).Value = Valor02
End With
dap.Fill(dst, "tCOMBOS")
Return dst.Tables("tCOMBOS")
Catch ex As Exception
End Try
End Function
en el VB :
Private objx As New ClsVentas
Private Sub llenarCombos()
With cboproducto
.DataSource = objx.getCombos(9, "", "")
.DisplayMember = "Productos"
.ValueMember = "IdProducto"
End With
end sub
Private Sub frmNuevaVenta_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
llenarCombos()
End Sub
y creo que para poder extraer las letras del texto en el combo y hacer la consulta necesaria tendras que ir en el evento keypress, pero no me ejecuta nada solo la primera letra que es por default.
Private Sub cboproducto_Keypress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles cboproducto.Keypress
Dim texto As String = cboproducto.Text.Trim()
Dim palabras() As String = texto.Split(" ")
If palabras.Length >= 2 Then
cboproducto.DataSource = objx.getCombos(9, palabras(0).ToString, palabras(1).ToString)
End If
End Sub
espero que me puedas ayudar gracias.
hola puchingo22
ResponderEliminarhasta donde se esa funcionalida dno puede lograrse con la implementacion que planteas el autocomplete de los controels del VS
quizas si se consigue algun control de terceros que lo implemente, pero con el del VS hasta donde se no se puede
saludos
hola leandro.
ResponderEliminarsabes estoy usando un autocomplete que funciona, ahora quiero crear un evento que al darle enter que llene varios textbox pero no me esta funcionando en realidad no tengo idea como hacerlo.
hola Ricardo
ResponderEliminarpero detectas el enter como hago aqui
[ADO.NET] – Parte 5 - Ejemplos Simples – Operaciones CRUD
analiza el evento keypress del ejemplo
saludos
Hola Leandro, tengo una consulta con respecto Winform en C#. Por ejemplo creo un UserControl para mostrar Paises el cual esta compuesto por un textbox (donde ingreso el código pais ó lo muestro) y un combobox (donde muestra el nombre del pais). Cuando muestra el form que contiene el usercontrol puedo cargar los datos con el combobox:
ResponderEliminar...CargarCombo()
List listado = new List();
listado = ListarPais(transac, obj);
cboPais.DataSource = listado;
cboSexo.DisplayMember = "Desc_Pais";
cboSexo.ValueMember = "Cod_Pais";
....
private void cboSexo_SelectedIndexChanged(object sender, EventArgs e)
txtCodPais.Text = cboPais.SelectedValue.ToString();
....
Quisiera que al ingresar el codigo del pais en el textbox y presione enter, me muestre en el combobox el pais que este relacionado al código y también si en el combobox selecciono algún nombre de pais me muestre en el textbox su código respectivo.
Gracias.
hola Julio
ResponderEliminaren el codigo hay algo raro, analiza estas tres lines:
cboPais.DataSource = listado;
cboSexo.DisplayMember = "Desc_Pais";
cboSexo.ValueMember = "Cod_Pais";
la primera dice cboPais, pero las otras dos cboSexo, eso esta correcto ? me parece que algo no esta bien
saludos
hola mi estimado.. tengo un trabajo .. se trata de mostrar en un listbox la cantidad de veces que se ingresan datos en un textbox.
ResponderEliminarse ingreso en el
textbox1: n
luego
textbox1: m
en el listbox debería de mostrar el numero 2
hola Esau
ResponderEliminarno entendi porque en el listbox se mostraria un 2 ? o sea el listbox puede desplegar una lista de items, porque si escribes dos valores diferentes el listbox solo mostraria un numero
ahora si dijeras quen cada valor ingresado se va copiando como item al listbox eso seria otro tema
saludos
como pordria atravez del dato encontado llenar otro textbox con la informacion del producto por ejemplo mostrar el codigo y una cantidad en exixtencias una vez seleccionado el nombre. gracias espero me ayuden
ResponderEliminarhola william
ResponderEliminarel tema es que si necesitas identificar un producto quizas hacerlo por el nombre no se buena idea, porque podrias ahber varios iguales, salvo que puedas asegurar que el nombre sea unico
quizas una opcion como el buscar de este articulo
[N-Tier] – Desarrollo en capas - Ejemplo Facturación – Parte 1
saludos
Hola Leandro !!
ResponderEliminaruna preg. como hacerle para que al momento de seleccionar un item del combobox muestre su equivalenccia en un textbox
o sea me explico:
la tabla tiene
ID: 1, 2, 3
nombre: lucy, berenice, marcela
la idea es al seleccionar el item 2 del combobox, en la caja de texto aparezca el nombre de BERENICE.
Si pudieras ayudarme te lo agradeceria mucho !!
hola Karlos
ResponderEliminareso que planteas va mas alla de autocmplete, debes realizar simplemente una query que filtre por el i y recupere los datos de la entidad
[ADO.NET] – Parte 5 - Ejemplos Simples – Operaciones CRUD
como veras se ingresa el id y al presionar enter se lanza la busqueda que carga los demas campos
saludos
Hola de nuevo Leandro !!
ResponderEliminarGracias Por tu Ayuda Pero soy Nuevo en este Tema y No Se Muchas Cosas, No Tendras Un Ejemplo Mas Especifio??
La Idea es Hacer Un Recibo En El Cual Se Tiene Unos Campos Donde Van Claves Y Al Seleccionar Una Clave del ComboBox y En Un TextBox Arroje El Servicio Que Corresponde a La Clave, Como Te Digo Soy Nuevo En El Tema !!
Si Pudieras Ayudarme Te Lo Agradecería Mucho !!
hola Karlos
ResponderEliminarentiendo lo que planteas pero no tengo ningun ejemplo armado de con una logica como esta
quizas el mas parecido sea
[WinForms] ComboBox Anidados
en tu caso el ejemplo parte con el ultimo combo que cargaria los datos del form
saludos
Hola de nuevo Leandro !!
ResponderEliminarGracias por tu aporte, me ayudo bastante. Logre arreglar mi problema
Ahora solo tengo una pequeña duda, no tendras un tutorial para realizar impresiones de los recibos o algun ejemplo de como hacerlo??
Te agradeceria mucho si pudieras Volverme a Ayudar !!
De ante mano Muchas Gracias !!
hola Karlos
ResponderEliminarse me ocurre que podrias realizarlos mediante el uso de Crystal Reports o Reporting Service
digo para tener un diseñador para confeccionar el recibo
saludos
Hola de nuevo leandro !!
ResponderEliminardisculpa la molestia de nuevo, solo para preguntarte si tienes alguna idea de como hacer la funcion de hotmail en un prooyecto realizado en c#
me explico, lo que quiero es que al verificar si se encuentra el registro y si es asi al mostrarlo en un datgrid darle click y te mande a otro formulario pero al mismo tiempo que cargue la informacion de ese paciente solamente !!
de antemano gracias por tu ayuda !
hola Karlos
ResponderEliminarno se si entendi, seria como el buscar de este ejemplo
[N-Tier] – Desarrollo en capas - Ejemplo Facturacion - parte 1
que abre un form de busqueda de la entidad para seleccionar una existente
saludos
hola leandro tu ejemplo de autocompletar el textbox me funciona muy la converti a aplicacion de visual studio 2010 y funciono, el problema es al utilizar el mismo codigo en una aplicacion nueva no funciona desde luego cambie toda la conecion a la base de datos, hay algunos atributos o propiedades para añadir en las nuevas versiones
ResponderEliminarhola mauricio
ResponderEliminaren principio no debria haber nada diferentes
podrias poner breakpoint en el codigo para evaluar si el metodo que carga el AutoCompleteCustomSource devuelve registros de forma correcta
valida tambien que devuelvas un AutoCompleteStringCollection, tiene que ser de este tipo
saludos
gracias leandro me sirvio de mucho establecer los puntos de interrupcion ya encontre el error gracias
ResponderEliminarleandro mil gracias por todos sus aportes a la comunidad y al la programacion
ResponderEliminaruna pregunta mas como se podria manejar un formulario que me permitiera buscar una imagen visualizarla en el y amacenar solo la ruta de esta imagen en una base de datos de tal modo que al realizar una consulta se me carge esta imagen gracias he buscado por varios sitios y no he hallado respuesta creo que es un poco complejo pero no se encuetran ejemplos de esto en la web gracias
saludos
hola mauricio
ResponderEliminaraqui se responde el mismo tema
http://social.msdn.microsoft.com/Forums/es-MX/vbes/thread/60192e4e-09e3-47b7-b47b-0cf837bc1bf0
creo que podria ser util lo alli comentado
saludos
Hola Leandro gracias por el aporte una última pregunta donde puedo.encontrar validación de menú dependiendo de el usuario gracias con esto terminó un gran proyecto
ResponderEliminarhola mauricio
ResponderEliminarno entendi, valudacion de menu ?
te refieres a segun el usuario que se autentica se definan las opcioens del menu a las que tiene acceso
http://www.simple-talk.com/dotnet/windows-forms/controls-based-security-in-a-windows-forms-application/
podrias crear algo como lo reflejado en el articulo, quizas con algunas modificacioens epro como veras se definen usuario roles, y despues paginas o contoles a los que se tiene acceso, recuperando la info de la db pdorias armar un menu dinamico en base a esa data
saludos
Gracias Leandro muy buenos aportes gracias por todos las ayudas
ResponderEliminarHola Leandro, muy util tu blog y permitime robarte lo que subiste, te hago una consulta, hay que agregar alguna dll?, estoy con el VS2010 y no me reconoce el DataHelpers.
ResponderEliminarhola Jose
ResponderEliminarEl datahelper es solo una clase que esta alli mismo en el proyecto de ejemplo que descargas, pero eso debes implementarlo tu mismo dependiendo de donde tomes la info que cargas para el autocomplete
en principio no se necesita ninguna dll
saludos
Hola Leandro, tu ejemplo sirve para WebForm?. En todo caso como podria implemetar algo similar para WebForm c#.
ResponderEliminarGracias desde ya...
hola luis
ResponderEliminarpodrias implementar el
AutoComplete - ajax toolkit
saludos
Leandro yo lo estoy ejecutando de la siguiente manera usando mysql pero no se que funcion cumple el DataHelper o como lo puedo usar con c# y mysql
ResponderEliminarMySqlCommand LlenarComboProd = new MySqlCommand();
LlenarComboProd.Connection = ClaseConectarme.Coneccion;
LlenarComboProd.CommandType = CommandType.Text;
LlenarComboProd.CommandText = "select Ref1, Nombre, Venta, Costo, Iva from producto where Estado=?est and Empresa=?emp order by(Nombre)";
LlenarComboProd.Parameters.AddWithValue("est", "A");
LlenarComboProd.Parameters.AddWithValue("emp", ClaseEmpresa.Nit);
MySqlDataAdapter da2 = new MySqlDataAdapter(LlenarComboProd);
DataTable dt2 = new DataTable();
da2.Fill(dt2);
Producto.DisplayMember = "Nombre";
Producto.ValueMember = "Ref1";
Producto.DataSource = dt2;
Producto.AutoCompleteCustomSource = DataHelper.LoadAutoComplete();
Producto.AutoCompleteMode = AutoCompleteMode.Suggest;
Producto.AutoCompleteSource = AutoCompleteSource.CustomSource;
hola
ResponderEliminarestas seguro que para los filtros que asignas hay datos? que pasa si solo usas:
select Ref1, Nombre, Venta, Costo, Iva from producto
muestra opciones el autocomplete en este caso ?
saludos
Gracias, me ha funcionado! :D :D :D
ResponderEliminarhola leandro!! quisiera saber como puedo implementar ese codigo pero para obtener los datos de una base de datos creada con db4o?? disculpa la molestia :)
ResponderEliminarhola blankis
ResponderEliminarpero esa que mencinas es una base de datos orientada a objetos
alli no se aplican queries de sql para tomar los datos
quizas puedas usar linq para recuperar la info de esa db
http://refcardz.dzone.com/refcardz/getting-started-db4o
saludos
excelente blog.... se te agredece mil
ResponderEliminarBuen aporte.Gracias.
ResponderEliminarBuenas tardes.. Estoy trabajando con C# pero en windows mobile, lo que se quiere hacer desabilitar el autocompletado de los TextBox; hay manera de que me pueda ayudar porfavor..
ResponderEliminarGracias..
Miguel Vicente Vargas
hola Miguel
ResponderEliminarpor mobile te refieres a Windows Phone?
saludos
A windows Mobile 6.5
ResponderEliminaruna consulta leandro tengo dos tablas el uno es tipo cliente y el otro cliente....
ResponderEliminaryo desde mi combobox llamo los datos de la tabla tipocliente (idtipo int ,tipo nvarchar(15)) y me muestra el tipo que es con displaymember y valuemember ... pero quiero insertar lo que muestra en el combobox que me muestra el tipo... pero en la tabla cliente y tipo cliente se relacionan con idtipo... como haria para insertar .. pero he puesto uno de tus ejemplos pero me sale error cmd.Parameters.AddwithValue("@cod_tipo",CInt(CBtipocliente.SelectedValue))
por fin vi cual era el error leandro gracias
ResponderEliminarHola Leandro. Como estas?. Si la consulta que estoy haciendo en el autocomplete devuelve muchos registros, me conviene o no?
ResponderEliminarhola Yoselin
ResponderEliminaren ese caso depende, recuerdo que algunos sitios web para aplicar el autocomplete lo que hacen es solicitar como minimo 2 o 3 caracteres y alli recien lanzar la busqueda para mostrar el listado
con esto te aseguras que la lista no sera tan grande
no se si en este caso se puede aplicar, quizas el autocomplete standar del textbox, no sea la adecuada, porque este requiere que la lista se cargue completa, habia que ver alguna otra implementacion que realice la busqueda a medida que se escribe
saludos
Hola Leandro. Muchas gracias por la ayuda que nos brindas. quisiera saber si me podrias orientar..
ResponderEliminarQuisiera tener un control donde pueda escribir para realizar una busqueda ya sea texto (el nombre del producto) o numerico(su clave) pero todo en el mismo control. no se si podria ser en un text box pero aparte que me desplegara un listado de las opciones como un combobox.
Ojala me haya podido explicar.
muchas gracias..
hola Mauricio
ResponderEliminarel tema es que el textbox solo te va a dejar buscar por un solo item, o es por el nombre o es por el numero, por ambos no
quizas podrias poner algun radiobutton en donde el usuario seleccione por cual quiere buscar, entonces cargas ls busqueda en base a esa seleccion
saludos
Muchísimas Gracias Leandro, tú siempre ayudando en cualquier situacion de programacion, algo como esto exactamente estaba buscando,muchas gracias de nuevo
ResponderEliminarHOLA LEANDRO.NO SOY EXPERTO EN EXCEL PERO ME DEFIENDO UN POCO....TENGO UN FORMULARIO CON DOS COMBOBOX (1-2) Y DOS TEXTBOX AMBOS DEPENDEN DEL COMBOBOX 2, CUAL SERIA EL CODIGO DE AUTOCOMPLETAR SI AL LLAMAR EL LISTADO DEL COMBOBOX 2 TENGO DATOS COMPUESTO,YO LOS TENGO SEPARADOS POR / Y QUE AL BUSCAR EL SEGUNDO NOMBRE EN AUTOCOMPLETAR ME DE LOS VALORES DE LOS TEXTBOS
ResponderEliminarEj: EL COMBOBOX 1 EL LISTADO ES:
SONY
ALCATEL
SAMSUNG
EL COMBOBOX 2, ESTE SGTE LISTADO DEPENDE DE SONY :
W1100/W205
Z760/MIRO/TIPO
SLAIDER W500/SLAIDER W580
Y QUE AL BUSCAR Ej: W205 ME DE LOS VALORES DE LOS TEXTBOS
LOS CODIGOS QUE TENGO DE ESTE FORMULARIO Y QUE ESTOY UTILIZANDO SON ESTOS:
Private Sub BORRAR1_Click()
ComboBox1 = Empty
ComboBox4 = Empty
TextBox1 = Empty
TextBox2 = Empty
End Sub
Private Sub ComboBox1_Change()
ComboBox4.Clear
indice = ComboBox1.ListIndex + 9
Cells(2, indice).Select
Do While ActiveCell.Value <> ""
ComboBox4.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Private Sub UserForm_Initialize()
ComboBox1.Clear
Me.StartUpPosition = 0
Me.Left = 0
Me.Top = 0
Dim nombre As String
Dim rango
rango = sheets.Count
For i = 1 To rango
Range("i1").Select
nombre = sheets(i).Name
Next
Do While ActiveCell.Value <> ""
ComboBox1.AddItem ActiveCell
ActiveCell.Offset(0, 1).Select
Loop
End Sub
Private Sub ComboBox4_Change()
On Error GoTo MANEJOERROR
TextBox1.Value = Application.VLookup(Me.ComboBox4.Value, Range("b3:d110"), 2, 0)
TextBox2.Value = Application.VLookup(Me.ComboBox4.Value, Range("b3: d110"), 3, 0)
TextBox2 = Format(Val(TextBox2), "$ #,##0")
Exit Sub
MANEJOERROR:
MsgBox "BORRAR", VBEXCLAMTION, "ACTUALIZAR"
End Sub
LE AGRADESCO DE ANTEMANO LA AYUDA Q ME PUEDA BRINDAR
hola Rodrigo
ResponderEliminarme temo que el autocomplete que proporciona .net no cubre lo que buscas implementar
el autocomplete solo busca desde el principio de la cadena y no de otro lugar o con texto compuesto o utilizando separadores
si escribes W11 este listara los item que empiecen con ese texto, pero solo lo hara cuando empiede no buscara desde otro lugar
salvo que utilices algun textbox de terceros que implemente su propio autocomplete custom
saludos
hola leandro..como te comente inicialmente entiendo poco de excel..y te agradesco por tu colaboracion rapida con tu respuesta..me deja un poco desubicado , tu me comentas que una soluccion seria hacer un textbox de tecero;segun tu criterio y con los codigos q tengo montados..como seria la forma de implementar ese textbox...gracias
ResponderEliminarleandro me falto comentarte que estoy manejando excel 2010 ,lo que no se decirte si es vba.net...y las planillas que manejo en varia hojas son del excel 2010..hombre leandro, en que forma tu puedes orientarme a que pueda utilizar un autocompletar; porque el listado que manejo en el combobox4 son compactibles entre si siempre que esten separados por el / ,y me urge manejarlo con cualquiera de los nombres, gracias por tu colaboracion
ResponderEliminarhola Rodrigo
ResponderEliminarcuando comente lo de textbox de terceros no apuntaba a desarrollarlo sino a buscar o comprar un componente que implemente alguna funcionalidad de autocomplete mas avanzada
por lo que planteas el utocomplete basico que planeas .net no alcanza, deberias buscar otro tipo de busqueda, quizas algun popup,o sea que se abra un forma en dodne tentas algun textbox y grid en donde al escribir en el textbox puedas buscar en cualquier parte del campo de los datos que dispones y se listen para luego seleccionar el dato concreto y retornarlo al forma inicial
pero esto ya no seria un autocomplete sino un forma de busqueda avanzada
algo similar al boton de "buscar" de aqui
[N-Tier] – Desarrollo en capas - Ejemplo Facturación – Parte 1
que desplega una nueva ventana para poder seleccionar
saludos
hola leandro....mil gracias por saber que cuento contigo...sigo todavia con mi ignoracia sobre excel y me disculpas...cundo tu me dices que buscar o comprar, es sobre un vba mas avanzado ? y que me de la posibilidad de implementar la busqueda del autocompletar del combobox ,si es asi...me da todavia la posibilidad de saber que si podre ejecutar el formulario como deseo hacerlo....gracias
ResponderEliminarhola Rodrigo
ResponderEliminaren realidad excel lo imaginaba como una base de datos comun ya que si usa ado.net para acceder al excel puedas trabjarlo con queries de sql para recuperar los datos
si es asi utilizarlo en un autocomplete no es diferente a cualquier otra db
lo que planteo es que el autocomplete que plantea los controles del VS estan limitados, por eso buscar alternativas con componente de terceros, otras companias que desarrollan controles y comprarlos, o ver de aplicar la busqueda en una ventana como el del articulo que propuse
eso no seria un autocomplete pero si te dejaria implementar una busqueda avanzada que podrias adaptar como lo necesites
saludos
hola leandro...gracias por tu ayuda y disculpa que te siga molestando..segun usted..cual me recomiendas...y que segun mis pocos conocimientos de excel me pueda mover facilmente...gracias
ResponderEliminarEstimado Maestro Leandro!.
ResponderEliminarEstoy intentando hacer algo parecido, que dado un textbox y un listbox, yo sea capas de filtrar la búsqueda y me muestre los registros en el listbox! Los cuales son buscados en una BD SQLServer Llamada "Generos" y si dicha búsqueda retorna coincidencias de forma simultanea :
Esto es lo que he intentado:
FORM GEneros:
http://sia1.subirimagenes.net/img/2013/09/19/130919094130127444.png
private void textBox1_TextChanged(object sender, EventArgs e)
{
SqlConnection cn = new SqlConnection(@"Data Source = RICHARD-PC; Initial Catalog = Generos; Integrated Security = true");
cn.Open();
string cadena = string.Format("SELECT * FROM Generos WHERE (_NombreGenero LIKE '" + textBox1.Text + "')");
SqlCommand cm = new SqlCommand(cadena, cn);
//cm.Parameters.AddWithValue("@textBox1", textBox1.Text);
SqlDataAdapter Reader = new SqlDataAdapter(cm);
DataSet data = new DataSet();
Reader.Fill(data);
listBox1.DisplayMember = "_NombreGenero";
listBox1.DataSource = data.Tables[0];
}
Codigo:
http://sia1.subirimagenes.net/img/2013/09/19/130919094317751842.png
Ahora no he logrado los resultados positivos. y nosé como lograrlo! ojala puedas ayudarme. no se si tendre que usar un ciclo , try catch, un while pls me urge . gracias!
hola rimesoft
ResponderEliminary si usas
string cadena = "SELECT * FROM Generos WHERE _NombreGenero LIKE '%'+ @param +'%'";
SqlCommand cm = new SqlCommand(cadena, cn);
cm.Parameters.AddWithValue("@param", textBox1.Text);
SqlDataAdapter Reader = new SqlDataAdapter(cm);
alli buscas en cualqueir parte del texto sino puedes quitar un '%' para buscar al principio o al final las coincidencias
saludos
Gracias ya lo logre! , ahora mi duda es cuando por ejemplo de 1000 coincidencias y mi palabra a buscar tiene 20 caracteres. Como hago para que al hacer click en el listbox se copie en el textbox!? con esto termino, gracias
ResponderEliminarhola rimesoft
ResponderEliminarpodrias usar el evento SelectedIndexChanged del listbox y alli usar
textbox1.Text = Convert.ToString(listbox1.SelectedText)
saludos
Gracias Leandro, me fuí muy útil. Lo implementé con un modelo 3 capas y sin problemas.
ResponderEliminarGracias de Nuevo.
Gracias.. Lo implementé en un proyecto por capas y funciona igual.
ResponderEliminarDe nuevo gracias.
buenas noches leandro, tengo una consulta por dias he querido crear un codigo en el cual tengo 2 textbox en el primero escribo el nombre del usuario y en el segundo quiero que al escribir la primer letra del nombre me aparesca en un autocompletable en el textbox2 sugerencias de id de usuarios por ejemplo nombre completo text1: mario barahona gutierrez almendarez, text2 quiero que aparezca asi forma de lista autocompletable: mario.9659, otra linea donde aparesca barahona.4568, y asi sucesivamente varias combinaciones con el nombre o solo la primer letra por ejemplo m.mario865 o m.barahona1245 y asi sucesivamente, todo esto quiero sacarlo del nombre sin conexion a base de datos, el programa que uso es visual basic
ResponderEliminarhola Kelvin
ResponderEliminarno veo que la funcionalidad de autocomplete pueda resolver el problema que planteas, la implementacion del autocomplete que incluye .net es mucho ams simple
igual lo que no entendi es sino es de una db de donde obtendrias esta informacion para mostrar en el control
saludos
Hola Leandro, me parese que es lo que estoy buscando solo que tengo problemas con el codigo del modulo DataHelper me aparese un error en la parte de CONFIGURATIONMANAGER
ResponderEliminarDim connectionstring As String = ConfigurationManager.ConnectionStrings("default").ConnectionString
el error me dice que no esta declarado y que puede ser inaccesible debido a su novel de proteccion, espero me puedas ayudar, SALUDOS Y GRACIAS
hola Rimazk
ResponderEliminartienes que agregar la referencia a System.Configuration
con esa referencia y el
using System.Configuration;
podrias utilizar la clase ConfigurationManager
saludos
Hola,
ResponderEliminarAntes que nada queria saludarlo por estas fiestas deseando que todo le vaya bien.
Al tema existe una forma de implementar esto en una Librería de Clases?, pasa que todas las transacciones con la base de datos la hago en una librería por eso de las 3 capas. Pero me encuentro con el error de que al parecer la clase AutoCompleteStringCollection está heredada del espacio de nombres Windows.forms, y es en esencia para los formularios.
En este caso como sería posible poder usar el AutoCompleteStringCollection en un proyecto de 3 capas?... sin afectar la seguridad que te ofrece ésta.
Estaba viendo hacerlo con un módulo como usted lo hace, sin embargo esto no afectaría a la estructura de 3 capas?...
hola Leandro, se puede hacer algo como esto con el autocomplete
ResponderEliminarSi escribo 'st' se filtre el combo con las palabras que tengan coincidencias con la cadena ingresada
AUSTRALIA
AUSTRIA
ST KITTS
ST LUCIA
UNITED STATES
hola
ResponderEliminarno se puede implementar lo que planteas con la funcionalidad estandar del autocomplete de .net
Multivalue AutoComplete WinForms TextBox for tagging
alli hay una implementacion custom del autocomplete, quizas se podria tomar alguna idea he implementar algo especial para que busque en diferentes partes del string
saludos
hola Miguel
ResponderEliminares que AutoCompleteStringCollection lo usas siempre desde la capa de presentacion
o sea la capa de negocio y datos le otorgara a la UI los items que debe presentar en un objeto del dominio de la aplicacion, es en codigo de la UI donde realizas la conversion a este tipo de coleccion
o sea el negocio no tiene porque devolver un AutoCompleteStringCollection porque no es responsabilidad de el adaptar al tipo que requiere la ui para presentar los valores
recuerda que la UI no tiene porque mostrar asi como le viene del negocio, puede tener codigo y reglas que validen o conviertan de tipos para adaptar los datos a la presentacion
saludos
Hola sr Leandro, disculpa mi ignorancia, en el llamado a la función LoadAutoComplete(); que significa DataHelper? Mi segunda pregunta es, en el LoadDataTable(); es una función que contiene los datos de conexión y consulta para devolver otro DataTable? Así es que funciona? Gracias de antemano, me gusta muchísimo tu blog, un saludo.
ResponderEliminarhola hackers13
ResponderEliminarDataHelper es solo el nombre que le di a la clase que implementara la funcionalidad que ayude en la obtencion de los datos, pero si usas capas podria ser las clases de acceso a datos
en realidad en esa clase se cumplen dos funciones, una es la de acceder a la db y la otra de transformar los datos para adaptarlos a tipo que requiere el autocomplete
en el metodo LoadDataTable() alli me estoy conectando a la db para recuperar la info, pero nuevamente, si tienes una capa de acceso a datos puedes utilizarla
recuerda que este es un ejemplo simple que solo refleja el autocomplete, la forma en como accedes a los datos puedes cambiarla
saludos
Holaaaa mi estimado Leandro, antemano agraceder por ayudarnos a darnos una idea a nosotros los programadores.
ResponderEliminarMi consulta es la siguiente implemente mi autocomplete combobox pero quisiera que al momento de escribir una palabra
Ejm: Pe
-Peru
-Polonia
al escribir pe se autoseleccione y presione enter y se complete en su totalidad.
Saludos!!!
hola Russell
ResponderEliminarno se si el autocomplete tenga esta funcionalidad
aunque tengo una duda, cuando escribes no se desplaga la lista, cuando lo hace si te mueves con los botones de flechas del teclado no te deja seleccionar una opcion y si alli presionas enter no la selecciona?
el autocomplete muestra una lista de opciones deberia estar marcada una para que la selecione, directo con enter no veo como podria seleccionarla sino hay una seleccionada
saludos
Hola leandro antemano agradecerte por la respuesta a mi consulta.
ResponderEliminarTe comento cuando selecciono con las flechas si me permite seleccionar con total normalidad todo el contenido de la palabra y logicamente ya se completa todo.
Estoy tratando de darle el punto ahi al autocomplete si lo logro te estare comentando y compartiendo.
Lo que en realidad me referia que por incidencia pueda seleccionar 1 ejm:
Si pongo Per: ya de por si seleccione Peru.
si pongo Perm: seleccion permano algo asi no es la idea.
Hola Leandro,
ResponderEliminarlo primero agradecerte tu esfuerzo, nos ayudas a muchos.
Tengo un problema con AutoComplete en un TextBox. La cuestión es que a veces se queda permanente el elemento elegido de la lista que despliega el ac. Y al salir de la pantalla correspondiente o al cambiar el foco, este elemento no desaparece.
He visto que cuando se oculta la lista ac, el textbox asociado tiene SelectedIndex = -1. Pero cuando no se queda fijo textbox.SelectedIndex es 0. Intento cambiarlo en código a -1, pero sigue sin ocultarse ese elemento.
Todo esto se produce cuando en la lista ac solo hay un elemento y hago click con el ratón. Entonces ese elemento se queda fijo.
Gracias por tu ayuda.
Un saludo
hola Guti
ResponderEliminarpero es un textbox o un combobox el que usas con el autocomplete?
lo pregunto porque un textbox no tiene ninguna propiedad SelectedIndex
si es un combo el -1 indica que no hay seleccion que coincide con algun item del combo, si del autocomplete no se marco alguna coincidencia valida seguro va a seguir en esa opcion -1 hasta que un item del autocomplete coincida con alguno del combo y reconozca el cambio
saludos
Efectivamente, lo he explicado mal. Quien tiene la propiedad SelectedIndex es la lista AutoComplete.
ResponderEliminarCuando voy escribiendo en el textBox, la lista ac va mostrando los elementos coincidentes. Pero cuando queda un solo elemento en esa lista y pincho encima con el ratón, ese elemento queda fijo en la pantalla. La lista ac no se oculta.
Ese es mi problema.
Gracias
Hola
ResponderEliminarMuy bueno el ejemplo la verdad que me sirve muchísimo, el único problema que no puedo arreglar es modificar el tamaño de la lista ya que el texto a mostrar es mas largo que el textbox que uso.
Saludos
Leandro buenos dias:
ResponderEliminarQuiza no tenga mucho que ver con el tema de automplete, pero me gustaria saber como puedo quitar la primer letra de un textbox.. por ejemplo si se escribe la palabra "hola" que solo ponga "ola", gracias por tu ayuda.
hola Eduard
ResponderEliminarpodrias hacer
textbox1.Text = textbox1.Text.Substring(2)
saludos
Excelente como siempre, gracias por tu ayuda funciono de maravilla, por cierto tengo otro problema un poco mas complejo lo coloque en el sitio de microsoft pero aun no tengo ayuda, si tienes tiempo por aqui te dejo el Link http://social.msdn.microsoft.com/Forums/es-ES/e45d0cb7-ddae-4110-bb36-e783c6d72b76/actualizar-tabla-dependiendo-si-el-checkbox-esta-seleccionado?forum=vcses#e45d0cb7-ddae-4110-bb36-e783c6d72b76
ResponderEliminarhola Eduard
ResponderEliminarrespondi en el foro
saludos
Buenos dias.
ResponderEliminarCordial saludo.
Quisiera saber si existe la posibilidad de que el Autocomplete de Ajax tool kit, me busque las coincidencias dentro del mismo textbox, es decir que no me lleve la busqueda al list, si no mientras escribo se prediga en el mismo textbox.
Muchas
gracias
hola Orlando
ResponderEliminarcon la funcionalidad de ajax toolkit no vas a poder hacerlo porque este ya implementa un desplegable para mostrar las coincidencias
quizas algun plugin de jquery lo implemente, peor no sabria decirte cual, los que veo todos muestran desplegable
saludos
Muchas gracias amigo Leandro , Investigaré el tema.
ResponderEliminarHola Leandro. Agradeciendo de sobremanera por tu ayuda en muchas ocasiones, el combobox me aproblema respecto a que no logro desplegar valores únicos en él. Parece ser algo muy simple, pero no he hallado solución.
ResponderEliminarhola
ResponderEliminarno entendi lo de valores unicos en el combo
no sera un problema con los datos que asignas al autocomplete?
quizas estos estan duplicados por eso aparecen repetidos
saludos
Gracias por tu respuesta. Selecciono los datos de tabla1, que contiene los campos "título" y "año". Deseo que me aparezca el año de cada título, pero como un global, sin repetir el año de cada título si éste ya está incluido.
ResponderEliminarEsperando haberme dado a entender
hola
ResponderEliminartabla1 es un datatable ? o de que tipo de objeto se trata
porque podrias ver de crear un campo calculado que una la info del titulo y el año devolviendo esa union como resultado
usarias usa propiedad en el autocomplete
con el datatable se pueden crear campos calculados que unan la info de otros dos campos
tambien podrias realizar la union en el SELECT
saldos
hola leandro creo q este tema ya es algo viejo pero si me esta dando dolores de cabeza... cuando intento recorrer la tabla no me permite y me agrega solo el ultimo registro de esta .. al depurar me dice esto Item = Para evaluar una propiedad indizada, ésta debe estar certificada y el usuario debe proporcionar explícitamente los argumentos. y la verdad no tengo idea gracias de antemano
ResponderEliminarLeandro...mira hago esto:
ResponderEliminartxtrazon.AutoCompleteSource = AutoCompleteSource.CustomSource;
txtrazon.AutoCompleteMode = AutoCompleteMode.Suggest;
AutoCompleteStringCollection col = new AutoCompleteStringCollection();
NEGOCIO.samaepro objMaePro = new NEGOCIO.samaepro();
DataSet dts = objMaePro.ObtenerPorNombre(txtrazon.text);
foreach (DataRow row in dts.Tables[0].Rows)
{
col.Add(Convert.ToString(row["sanombre"]));
} txtrazon.AutoCompleteCustomSource = col;
Lo hace bien pero no me carga toda la busqueda completa..me carga algunos datos..en mi consulta hago un select... like , cuando hago un paso a paso se ve q los carga todos perfactamente pero cuando toka verlo en el form solo se ven algunos...q puede ser??
hola Juan Antonio
ResponderEliminarlo que no entendi es a que tabla haces referencia, es un datatable?
estas creando una clase propia que quieras cargar con los datos que provienen de una consulta a la db
saludos
hola Carlos
ResponderEliminarel tema es que el autocomplete que utiliza winforms no quiere que realices un like sino que cargues absolutamente todos los datos
sera el propio form luego quien filtre
intenta hacer
DataSet dts = objMaePro.ObtenerPorNombre();
sin filtrar por nada y veras como el autocomplete funciona correctamente
si quieres algo que filtre a pedido con el like vas a tener que usar algun autocomplete en un componente de terceros porque el que incorpora .net no trabaja de esa forma
saludos
hola leandro un saludo desde peru tengo un problema con AutoComplete
ResponderEliminarde un textbox la tecla enter , en evento KeyPress
private void txtBuscar_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
{
if (!txtBuscar.AcceptsReturn)
{
btnBuscar.PerformClick();
}
}
}
pero no me toma la accion me puedes ayudar.
hola Saavedra
ResponderEliminarpero tienes el foco en el boton cuando presionas enter?
ademas si defines el boton como
AcceptButton
no tienes que definir ningun keypress para detectar el enter, lo hara automaticamente
saludos
hola William
ResponderEliminarexacto solo funciona una sola vez porque busca desde el inicio del texto ingresado
saludos
hola William
ResponderEliminarcon el autocomplete estandar que proveen los controles de .net esto no se puede lograr
el autoomplete solo busca por una unica palabra
saludos
Hola Leandro,
ResponderEliminarMira tengo un problema algo parecido, lo que sucede es de que al momento de que presiono una tecla dentro de mi ComboBox debería colocarse como si fuera mi primer Item , Ej:
Tengo:
*Azúcar
*Harina Refinada
*Harina Integral
*Polvo de Hor.
*Polvo etc
Si yo presiono la Tecla "H" debería ponerse en primera posición mi item Harina Refinada para poder ver los demás items que comienzan con"H", no se si me dejo entender?.
Me ayudarías demasiado con esa respuesta, muchas gracias de ante mano.
hola Alexis
ResponderEliminary es asi como funciona si el usuario escribe la H deberia mostrar los items que comienzan con esta letra
ahora una duda, ese *(asterico) que has puesto, es parte del texto? porque sino el comienzo seria el * y no la H
saludos
Muy buena gracias (Y)
ResponderEliminarHola Leandro,
ResponderEliminarNo los asteriscos no tienen nada que ver, solo fue de ejemplo.
Claro como dices tu mismo es así como trabaja el ComboBox, pero se posiciona en la primera palabra que encuentra y si esta en la parte inferior se queda en esa posición, lo que yo necesito es de que si encuentra una palabra por ejemplo "H" lo posicione en la parte superior, no se si se podrá realizar eso?
hola Alexis
ResponderEliminarpero hasta donde se el autocomplete no se posiciona en ningun item que desplega, no sera que el puntero del mouse esta posicionando la seleccion
analiza las imagenes del articulo
A Guide to Programming AutoComplete
veras que el cursor es quien determina la seleccion, quizas en tu caso el cursor quedo a un nivel que marca el ultimo item de la lista
saludos
hola William
ResponderEliminarla verdad nunca lo habia evaluado pero si se puede
Autocomplete Menu
saludos
Hola Leandro, muy bueno tu articulo y tu blog en general. Estoy haciendo algo muy parecido a lo que sugieres en este articulo, pero tengo una duda, hay alguna posibilidad de que el Autocomplete me proporcione la manera de que los datos cargados aparezcan orden alfabeticamente, es decir en el caso de que fueran nombres y yo teclee:
ResponderEliminarletra L,
teniendo los resultados: Leandro, Lionel, Laura me salga ordenados alfabeticamente.
Muchas gracias de antemano y saludos desde La Habana
hola pablo
ResponderEliminarpodrias ordenar la query que usas para recuperar los registros que usaste para generar la lista del autocomplete
si la lista de proporcionas del autocomplete esta ordenada deberia aprecer de la misma forma cuando desplega
saludos
Hola Leandro gracias por el aporte pero tengo unas dudas con el código.
ResponderEliminarestoy trabajando con Visual Studio 2010 y me lanza una excepción. tal vez sea demasiado texto de excepcion.
System.Threading.ThreadStateException was unhandled
HResult=-2146233056
Message=El subproceso actual debe establecerse en el modo de subprocesamiento controlado simple (Single Thread Apartment, STA) para poder realizar llamadas OLE. Asegúrese de que la función Main tiene marcado STAThreadAttribute.
Source=System.Windows.Forms
StackTrace:
en System.Windows.Forms.ComboBox.set_AutoCompleteMode(AutoCompleteMode value)
en Ventas_Jaiser.View.Registrar_Venta.Registrar_Venta_Load(Object sender, EventArgs e) en D:\10 semestre\DesarrolloChavez - copia (2)\Jaiser_Alpha\Codigo\Ventas_Jaiser\View\Registrar_Venta.cs:línea 41
en System.Windows.Forms.Form.OnLoad(EventArgs e)
en System.Windows.Forms.Form.OnCreateControl()
en System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
en System.Windows.Forms.Control.CreateControl()
en System.Windows.Forms.Control.WmShowWindow(Message& m)
en System.Windows.Forms.Control.WndProc(Message& m)
en System.Windows.Forms.ScrollableControl.WndProc(Message& m)
en System.Windows.Forms.ContainerControl.WndProc(Message& m)
en System.Windows.Forms.Form.WmShowWindow(Message& m)
en System.Windows.Forms.Form.WndProc(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
en System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
InnerException:
Gracias por leerme
hola Jonathan
ResponderEliminarpero estas quizas lanzando un thread (hilo) para realizar la busqueda del autocomplete
podrias validar que el Main tenga el atributo [STAThread] como se ven en la
imagen
saludos
Hola amigo, espero que te encuentres muy bien.. Pasando a otro tema quisiera de favor asesorarme con la siguiente problematica!!
ResponderEliminartengo un dropDownList(DDL) y lo quiero cargar desde un el evento SelectionChanged de un gridview mismo que consulta de una base de datos en mysq, el problema es que tengo un id y es mismo quiero que cargue en el DDL!! ya usé la propiedad valuemember pero no lo respeta... Aquí te dejo mi código:
if (rgv_Presupuesto.SelectedRows.Count > 0)
{
sped_NoOA.Value = Convert.ToInt32((rgv_Presupuesto.Rows[0].Cells["NUMERO"].Value.ToString() == string.Empty) ? "0" : rgv_Presupuesto.SelectedRows[0].Cells["NUMERO"].Value.ToString());
ddl_NoOyA.ValueMember = Convert.ToString(sped_NoOA.Value);
}
hola Omar
ResponderEliminarque tipo de aplicaicon estas desarrollando ? porque el DropDownList y el GridView son controles de asp.net
pero el ValueMemeber que mencionas es de un ComboBox de winforms
ademas que significa esto
Convert.ToInt32((rgv_Presupuesto.Rows[0].Cells["NUMERO"].Value.ToString() == string.Empty)
no puedes poner un condicional junto a una conversion de tipo, quizas algo como esto
string numero = rgv_Presupuesto.SelectedRows[0].Cells["NUMERO"].Value.ToString();
sped_NoOA.Value = numero == string.Empty ? "0" : Convert.ToInt32(numero);
saludos
try this...C# Autocomplete textbox
ResponderEliminarLing
hola soy nuevo en esto quisiera que me ayudaran
ResponderEliminarestoy agregando en una pagina de tabcontrol pero quiero q me edite en una pagina siguiente buscandolo mediante un combobox pero no se actualiza cuando edito osea no me aparece los datos guardatos al momento de editar
gracias de antemano
hola soy nuevo en esto quisiera que me ayudaran
ResponderEliminarestoy agregando en una pagina de tabcontrol pero quiero q me edite en una pagina siguiente buscandolo mediante un combobox pero no se actualiza cuando edito osea no me aparece los datos guardatos al momento de editar
gracias de antemano
Puedes ser un poco mas especifico?
ResponderEliminares que tengo en un tab control 2 paginas una de agregar y otra de editar pero cuando agrego todo normal el problema es cuando quiero editar es un conbobox que me desplega los datos que he guardado solo me aparecen cuando cierro el form y lo vuelvo abrir
ResponderEliminarHola Leandro!, me consulta es:
ResponderEliminaral utilizar esta instrucción de autocompletar ya sea en la propiedades o en Form load.
'ComboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend
'ComboBox1.AutoCompleteSource = AutoCompleteSource.ListItems
me funciona perfecto, pero es norma que la caja de combobox este trabanjando, osea posiciono el cursor del mouse y me sale que esta cargando como si estubiera trabando
No pude descargar el rar de C#
ResponderEliminarhola Roberto
ResponderEliminarusas el control combobox estandar de winforms o es un control de terceros?
no se si los items de la busqueda los traes desde una query a una base de datos, quizas esto genere la demora y esa carga que mencionas en el combo
lo que no mencionas es como asignas el AutoCompleteCustomSource para definir los datos del autocomplete
saludos
Leandro Gracias por responder!!
ResponderEliminarsi mi combobox esta enlazado a un BindingSource...
yo lo estaba utilizando para mostrar los datos,registros de una tabla access
tengo un buscador, también botón imprimir, agregar nuevo, modificar, cancelar.
Yo lo estaba utilizando hasta hace días, sin autocomplentar lo haciamos con el click del mouse en la flechita del combo así nos desplegaba la lista eso nos hacia mas lentos en la carga. hasta que me surgió la necesidad de ayudar a mi compañera que es la carga los datos.
Utilice el auto completar que no medio problema me funciona bien. pero algo me llama la atención es lo que te mencione: que parece que esta trabajando!! mi caja de combo.
hola Roberto
ResponderEliminarclaro la caja tiene que funcionar para que el usuario pueda escribir el texto a buscar sobre los items del autocomplete
sino habilita la escritura como realizaria el usuario la buesqueda
saludos
Cargar una lista desplegable automáticamente, tengo dos listas desplegables con varios datos para escoger, ejemple en la primera lista desplegable escojo el nombre de la empresa y en la otra lista se me deben de cargar solamente los nombres de los trabajadores que pertenecen a esa empresa. Espero su ayuda, saludos!
ResponderEliminarHola Leandro, estoy probando la propiedad AutoCompleteCustomSource, En mi base de datos de clientes tengo unos 3000. El problema que tengo es que tarda mucho en rellenar y me deja la pantalla en espera de que termine el foreach.
ResponderEliminarHe probado a coger un cobobox y asignarle el origen de datos, y esto no me tarda nada, lo hace al instante, pero si lo realizo así no me deja utilizar la propiedad AutoCompleteCustomSource. Que forma eficiente hay de realizar esto?
Este es el codigo que realizo para rellenarlo:
DataTable dataTable = (DataTable)BDWrapper.execute(clientesTableAdapter, "GetData");
azulejosleyvaDataSet.clientes.Merge(dataTable);
if ((dataTable != null))
{
azulejosleyvaDataSet.clientesRow clienteRowTextBox = null;
foreach (DataRow row in dataTable.Rows)
{
clienteRowTextBox = row as azulejosleyvaDataSet.clientesRow;
textBoxCliente.AutoCompleteCustomSource.Add(clienteRow.nombre);
}
}
Hola Leandro gracias por tu publicacion, tengon un problema con el onedrive, me sale mensaje de error. una cosa mas sabes como puedo hacer para que autocomplete hacia la derecha y tambien de la opcion de corregir un caracteres intermedio?
ResponderEliminarhola Victor
ResponderEliminarla verdad esta muy raro lo de onedrive, quizas ea porque en la red desde donde accedes este bloqueado
respecto al autocomplete, te comento qe estas capacidades que encionas no se pueden implementar, la funcionalidad con la que cuentas es bastante basica, quizas si necesitas algo como esto debas evaluar si controles de terceros la proporcionan
saludos
saludos
Hola Leandro!
ResponderEliminarExcelente tu Post, me funciono perfecto.
Mi problema es el siguiente:
Necesito verificar que el usuario selecciona un item del combobox o bien lo deja vacio, y que no le permita escribir un item que no este en la BD.
EL codigo que estoy utilizando para esto es el siguiente
Private Sub cmbIva1_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles cmbIva1.SelectionChangeCommitted
MsgBox(cmbIva1.SelectedIndex)
If cmbIva1.SelectedIndex = -1 Then
MsgBox("El numero de cuenta: " & Me.cmbIva1.Text & " no existe en el plan de cuentas, vuelva a intentarlo", MessageBoxButtons.OK)
Me.cmbIva1.Focus()
Return
End If
End Sub
El problema es que elija lo que elija el index siempre me vale -1, y no se porque pasa esto.
Muchas gracias!
tengo una duda, yo quiero que un combobox, me haga un atocomplete, pero que sustituya el evento que se realiza cuando se da click en la flecha y se despliega la lista de items, ya si doy click en la flecha y escribo en el me salen los item del autocolplete y del evento que se realiza al presionar la flecha,
ResponderEliminareste es mi correo
riddickemilio@gmail.com
Simplemente agradecerte mucho tu ayuda. Eres genial Leandro.Personas como tú son las que dan ánimos para seguir adelante.
ResponderEliminarhola amigo necesito hacer algo similar pero en un web form, podrias ayudarme, mi correo es Christian_sh@hotmail.com
ResponderEliminarBuenos dias Leandro una consulta tengo un textbox con un valor fijo y deseo qu elo que se ingrese se siga concatenando.
ResponderEliminarEjm:
REC- valor fijo
REC-015116 y que el usuario inrgese el numero pero que sin se borre el (REC-)
Gracias
Hola Leandro,
ResponderEliminarTengo un formulario con usuario y contraseña hecho en visual c#, necesito que cuando voy a escribir en el textbox no aparezca algun correo o nombre que ya haya escrito antes en ese textbox. Podrias ayudarme?
Gracias
Buenas noches amigos soy nuevo en programacion. ando creando un sistema en vb6.0 y me tope con un problema.
ResponderEliminarnecesito que al seleccionar el valor de un combo me muestre valores en 3 label. Te anexo mi codigo para que me puedas ayudar por favor.
Private Sub Combo1_Change()
If Combo1.Text <> "" Then
Adodc1.RecordSource = "SELECT [No,RFC,DOMICILIO,ESTADO,RAZON SOCIAL] FROM [CLIENTES]'" & Combo1.Text & " '"
End If
End Sub
Private Sub Form_Load()
Combo1.Visible = True
Label1.Visible = True
Label2.Visible = True
Label3.Visible = True
Adodc1.Refresh
Label1.Refresh
Label2.Refresh
Label3.Refresh
With Adodc1.Recordset
Do Until .EOF
Combo1.AddItem ![RAZON SOCIAL]
.MoveNext
Loop
End With
End Sub
y si en mi tabla tengo mas de 10.500 filas se me tarda bastante en abrir alguna solución ?
ResponderEliminartengo un formulario para crear un catalogo de cuentas pero quiero repetir un numero sin embargo me sale que ese codigo ya existe como puedo hacer para repetirlo con otro nombre
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHola me parece excelente esta funcionalidad, solo q no se como acoplarla a mi proyecto ya q trabajo en cuatro capas, cargo bien el combobox pero no puedo ponerla la función de autocompletar, les agredezco cualquier aporte
ResponderEliminar