Poner un auto completado en un Textbox con SQL

Los expertos
Bueno mi problema es:
Tengo una base de datos que tiene 2 tablas, ahora bien en la tabla 1 hay un registro que puede tener varios registros de la tabla 2, entonces a mi cliente se le ocurrió la genial idea de tener un list box o text box que cuando este escribiendo se vaya autocompletando los registros de la tabla 2.
Me explico mejor con un ejemplo. En la tabla 1 hay un registro de características de otra tabla 2 que se llama características, así que el usuario puede agregar tantas características quiera de la tabla 2 al registro de la tabla 1 puede poner:
Tabla 1
Nombre: "Fulanito de tal"
Características: mexicano (aquí es donde quiero que se autocompleten estas
                         Delgado características de la tabla 2 que tiene las
                         Moreno características)
                         Alto
Tabla 2
Mexicano
Japones
Delgado
Fonrido
Moreno
Blanco
Alto
Chaparro
Espero que me haya explicado bien je je de antemano
Gracias por su valiosa ayuda

1 respuesta

Respuesta
1
En primer lugar te recomendaría que cambies tu BBDD para que quede de este modo:
Tabla1
*idTabla1
Nombre
...
Tabla2
*idTabla2
Característica
...
Tabla3
*idTabla1
*idTabla2
De esta forma podrás realizar búsquedas más fácilmente.
Luego, para mostrar las características de la tabla 2 podrías utilizar el control CheckBoxList (asumo que usas Visual Studio), que permite mostrar todas las características para que el usuario seleccione las que quiera.
Hola experto gracias por tu respuesta
Solo una pregunta ¿para qué es la tabla 3? Bueno de que forma puedo usarla mejor, apenas estoy viendo todo lo que es diseño de bases de datos así que me ayudaría mucho que me explicaras un poco acerca de esto.
También, mencionaste que las búsquedas pueden ser más eficientes, ¿de qué forma puede ser esto?
Por cierto estoy usando visual studio C# 2008
y sobre el checkboxlist ¿cómo lo enlazo a la base de datos? Nunca he usado esto así que voy a checarlo
también informo que estoy usando procedimientos almacenados para todo lo referente a SQL (insert, delete, update, select, etc) así que
¿Cómo hago una consulta para llenar este checkboxlist con los procedimientos almacenados?
De antemano muchas gracias
O si se me olvido decirte el campo en donde quiero guardar las "caracteristicas" lo puse como varchar(300) ya que quería ver sis se podía poner el auto completado en relación a la base de datos donde tengo guardadas las características, si utilizo un checkboxlist ¿qué tipo de variable tengo que usar para guardar los campos de las características que el usuario desea? Claro esto se tiene que guardar en la tabla 1
Gracias por su valiosa ayuda
@font-face { font-family: "Times"; }@font-face { font-family: "Cambria"; }p.MsoNormal, li.MsoNormal, div.MsoNormal { margin: 0cm 0cm 10pt; font-size: 12pt; font-family: "Times New Roman"; }p { margin: 0cm 0cm 0.0001pt; font-size: 10pt; font-family: "Times New Roman"; }div.Section1 { page: Section1; }
1.- La tabla 3:
La tabla3 sirve para relacionar las tablas 1 y 2. Es una relación de N a M. Eso significa que 1 elemento de la tabla1 puede estar relacionado con N elementos de la tabla2 y que un elemento de la tabla2 puede estar relacionado con M elementos de la tabla1.
Ejemplo:
Supongamos que tenemos estos datos:
TABLA1(idTabla1, Nombre)
1, Manolo
2, Javier
TABLA2(idTabla2, Característica)
1, Moreno
2, Rubio
3, Alto
4, Bajo
TABLA3(idTabla1, idTabla2)
1, 1
1, 3
2, 2
2, 4
Esto significa que Manolo es Moreno y Alto y Javier es Rubio y Bajo.
2.- ¿Por qué las búsquedas serán más eficientes?
Siempre es más eficiente hacer una búsqueda sobre una clave primaria que sobre un campo de texto.
3.- Consulta para llenar el checkboxlist:
SELECT idTabla2, Carácteristica
FROM Tabla2
4.- Enlazar el checkboxlist con la base de datos.
Se haría de forma similar a como se enlaza un combo o un grid. Si usas procedimientos almacenados sería algo así http://www.forosdelweb.com/f29/llenar-checkboxlist-con-query-697039/
Wow gracias por tu pronta respuesta solamente una cosa
Cuando el usuario elige las diferentes opciones que desea de la tabla 2 ¿cómo almaceno esos registros en un solo registro de la tabla 1? Desde un principio a mi se me ocurrió usar un campo texto para almacenar estas opciones, de hecho como tengo diseñada la tabla 1 que es donde quiero guardar todo, le puse un campo "características varchar(300)" ya que pensé que usaría un textbox, ahora me doy cuenta que es mucho mejor el checkboxlist pero entonces ¿cómo lo almacenaría? ¿O esto seria en la tabla 3?
Y ahora en las consultas estaba usando un BindingSource puesto que hay un campo con foto que quiero mostrar y hasta ahora lo que sé de procedimientos almacenados solamente puedo hacer consultas y meterlas en un DataGridView.
Entonces ¿cómo quedaría para poder mostrar todo en un WindowsForm con BindingSource en un checkboxlist?
Gracias por la ayuda
Sería en la tabla 3.
No entiendo muy bien lo último que has puesto.
Hola experto!
Gracias por tu respuesta por cierto feliz año
Bueno ya he solucionado muchas cosas, nada más me falta una sencilla cosa,
¿Cómo se usan los checkboxList?
Ya tengo uno y para sacar que selecciono el usuario hice un arreglo pero no puedo almacenar nada en el arreglo más que la opción que esta señalada
Así que quisiera almacenar en un arreglo lo que el usuario seleccionó como string
No entiendo muy bien lo que quieres pero ahí van unos ejemplos:
Supongamos que queremos almacenar en un string las opciones seleccionadas separadas por comas. Sería así:
<span style="white-space: pre;"> </span>Dim str As String = String.Empty
<span style="white-space: pre;"> </span>For Each i As ListItem In CheckBoxList1.Items
            If i.Selected Then
                If String.IsNullOrEmpty(str) Then
                    str = i.Text
                Else
                    str = str + ", " + i.Text
                End If
            End If
        Next
Ahora supongamos que quisiéramos guardar las opciones seleccionadas por el usuario en la tabla 3. Tendríamos que crearnos una función "Tabla3_Insertar" que recibiese el id del usuario y el id de la opción y que crease una fila en la tabla 3 con esa información. Sería algo así:
For Each i As LisItem In CheckBoxList1.Items
<span style="white-space: pre;"> </span>If i.Selected Then
<span style="white-space: pre;"> </span>Tabla3_Insertar(idUsuario, i.Value)
<span style="white-space: pre;"> </span>End If
Next
Si no entiendes el código, te explico un par de cosillas.
CheckBoxList1 es el checkboxlist.
CheckBoxList1. Items es una lista de los elementos que contiene el checkboxlist. Cada elemento es del tipo ListItem.
El tipo ListItem tiene una propiedad llamada Selected que indica si el elemento está seleccionado o no.
Además hay otras dos propiedades, Text y Value. Text es el texto que se muestra por pantalla y Value es un valor identificativo de cada elemento. Por ejemplo: si mostrases los valores de la tabla 2 en el checkboxlist, Value sería la columna idTabla2 y Text sería la columna Caracterísitica.
Perdona.
Lee el mensaje como si <span style="white-space: pre;"></span> no existiera.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas