ASP.NET - 2 DropDowList y una BD Sql Server 2005

 
Vista:
sin imagen de perfil

2 DropDowList y una BD Sql Server 2005

Publicado por tonymr (10 intervenciones) el 06/05/2015 17:29:30
Tengo una base de datos(Carros) SQL Server 2005 y dos tablas relacionadas donde a cada carro le corresponde un modelo

Tabla1 – carrosmarcas
Idcarros - Int
marcacarros – nvarchar(100)

Tabla 2 – carrosmodelos
Idmodelo - Int
modelo – nvarchar(100)
idcarros – Int --- de la tabla Carrosmarcas

En ASP.NET tengo un formulario con dos DropDownlist.(Autopostback-=”True”) para los dos.
El primer DDlist se enlaza con mi tabla(Carrosmarcas) a traves de un SQLDATASOURCE y me los muestra sin problemas.

Necesito que cuando seleccione en el primer DDlist la marca de carro (Toyota) en el segundo DDlist me aparezcan unicamente los modelos de Toyota. En tiempo real por su puesto.(Imagino que deba se deba tener en cuanta esto a la hora de cargar el control DDlist2)

A demas de lo anterior les detallo lo que tengo:

DDlist1
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource1" DataValueField="dirfun" Height="28px" Width="210px" AppendDataBoundItems="True" AutoPostBack="True" DataTextField="dirfun" >
<asp:ListItem Text="Seleccione un marca de carro"></asp:ListItem>
</asp:DropDownList>

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:bdintranetiiftConnectionString %>" SelectCommand="SELECT [Marcacarros] FROM [Carrosmarcas]" >
</asp:SqlDataSource>


DDlist2
<asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="SqlDataSource2" DataTextField="grupfunc" DataValueField="grupfunc" Height="27px" Width="309px" AppendDataBoundItems="True" AutoPostBack="True" Enabled="False">
<asp:ListItem Text="Seleccione un modelo"></asp:ListItem>
</asp:DropDownList>

<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:bdintranetiiftConnectionString %>"

SelectCommand="SELECT carrosmodelos.modelo FROM carrosmodelos INNER JOIN carrosmarcas ON carrosmodelos. Idcarros = carrosmarcas. Idcarros WHERE (carrosmarcas. Idcarros = @ Idcarros)">
<SelectParameters> <asp:ControlParameter ControlID="DropDownList1" Name="iddirfun" PropertyName="SelectedValue" Type="Int32" /> </SelectParameters> </asp:SqlDataSource>


Cuando ejecuto mi formulario en ASP me da el siguiente error:
La cadena de entrada no tiene el formato correcto.
Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.

Detalles de la excepción: System.FormatException: La cadena de entrada no tiene el formato correcto.

Bueno, mi DDList1 lo que contiene es texto y el parámetro a recibir por la consulta es Int(carrosmodelos.idcarros) es int. Como resuelvo esto? Hay que hacer alguna conversión?

Cambie en mi tabla el tipo de datos de Int por nvarchar(100) al campo: carrosmodelos .idcarros y ya no deme da el error anterior , pero entonces esto no me funciona, no aparece nada en el segundo DDlist2, solo el item por defecto – selecciones un modelo-


He probado las consultas en el generador de consultas, le doy los parametros y todo OK.

Alguien sabe como resolver esto.

De antemano y como siempre Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

2 DropDowList y una BD Sql Server 2005

Publicado por Khristtian (83 intervenciones) el 06/05/2015 19:22:53
dirfun
grupfunc

??? de donde sacas esos nombres de campo para los valores de los dropdowlist???


Esto es mas fácil de lo que parece.

Crea un update panel
Dentro del updatepanel por dos dropdown (ddMarcas - ddModelos)
Crea dos origenes de datos: Uno para devolver los ID de Marcas, y la Marca, el otro para devolver el ID del modelo y el modelo.
Pruebas los origenes de datos, si devuelven todos los datos, sigues, sino, devuelvete
Ahora, sabiendo que los origenes de datos nos traen todos los registros, cada uno lo que corresponda, aplicas el filtro para los modelos.
En el origen de datos de los modelos, creas un parametro IDmarca, y lo asocias al ddMarcas.
Luego debes editar la consulta sql agreganado la clausula WHERE Idcarros=@IDmarca
Con esto la consulta trabajará con el valor que le pase el ddMarcas al parametro IDMarca
Puedes nuevamente probar, ejecutando esa consulta en el editor, e ingresando manualmente, cuando lo pide, el valor del parametro. se deberían filtrar ya los resultados.

Sabiendo que el filtro funciona, asocias al ddMarcas el origen de datos de las marcas y el ddModelos el origen de datos de los modelos.
Es importante saber que a cada dropdown le debes asignar en sus propiedades los campos para en valor y el texto a mostrar.
El valor, será el campo ID que corresponda.
El Texto, será el campo a mostrar (Marca o modelo, segun corresponda)

Ahora, al ddMarcas le habilitas en sus propiedades el autopostback

Y eso es todo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

2 DropDowList y una BD Sql Server 2005

Publicado por tonymr (10 intervenciones) el 11/05/2015 22:51:19
OK, muchas gracias. Funciono todo a la perfección.
La verdad no es tan complicado como lo explican en muchos videos tutoriales.
Gracias nuevamante.

Tony
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar