
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
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


0