Pasar datos de un gridview a un listbox

Tengo 3 listbox que los lleno un datasource, estos listbox están enlazados es decir dependiendo del país, el otro se llena con los estados dependiendo de que estado se llena con municipios correspondiente... Y tengo un gridview el cual también lleno con un datasource que muestra varios datos como domicilio, calle, id... Y entre ellos el país nada más.
Mi problema es que a la hora de hacer clic en el grid en el campo de domicilio por ejemplo pase los datos a los listbox en la misma página, solo los pasas para el primer listbox (de país) para los otros me marca este error : 'ddlEstado' tiene un SelectedValue que no es válido porque no existe en la lista de elementos. Nombre del parámetro: value
espero me hallan entendido y me puedan ayudar...

1 respuesta

Respuesta
1
Más o menos te entendí, tu quieres que al hacer click en el gridview pase se filtren los tres listbox pero solo lo hace para el listbox de país, ¿así es verdad?
¿Qué eventos tienes para cada listbox?
Podrías enviarme una parte de tu código y verlo para decirte que debes de cambiar o de que otra manera hacerlo.
Hola gracias por contestarme
Bien, mira en el código de vb aun no tengo nada,
así es como lleno los lisbox
<asp:DropDownList ID="ddlPais" runat="server" AutoPostBack="True"
DataSourceID="SqlDataSourcePais" DataTextField="NOMBRE" DataValueField="cve_pais"
Font-Names="Arial" Height="20px" Width="120px">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSourcePais" runat="server"
ConnectionString="<%$ ConnectionStrings:AGENDAConnectionString %>"
SelectCommand="SELECT * FROM Paises ORDER BY NOMBRE">
</asp:SqlDataSource>
<asp:DropDownList ID="ddlEdo" runat="server" AutoPostBack="True"
DataSourceID="SqlDataSourceEdo" DataTextField="NOMBRE" DataValueField="cve_estado"
Font-Names="Arial" Height="19px" Width="120px">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSourceEdo" runat="server"
ConnectionString="<%$ ConnectionStrings:AGENDAConnectionString %>"
SelectCommand="SELECT * FROM estado WHERE (cve_pais = @cve_pais) ORDER BY NOMBRE">
<SelectParameters>
<asp:ControlParameter ControlID="ddlPais" Name="cve_pais"
PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource>
<asp:DropDownList ID="ddlMpio" runat="server" AutoPostBack="True"
DataSourceID="SqlDataSourceAsentamiento" DataTextField="nombre"
DataValueField="CVE_mpio" Font-Names="Arial" Height="20px" Width="120px">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSourceMpio" runat="server"
ConnectionString="<%$ ConnectionStrings:AGENDAConnectionString %>"
SelectCommand="SELECT * FROM ASENTAMIENTO WHERE (CVE_estado = @cve_estado) ORDER BY nombre">
<SelectParameters>
<asp:ControlParameter ControlID="ddlEdo" Name="cve_estado"
PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource>
Y bueno hay otro listbox (4 en total ) sobre asentamiento que prácticamente sigue el mismo patrón, en el grid solo muestro el id_domicilio, el nombre de la persona, domicilio(calle, numero) y el país. Porque son varias tablas relacionadas así que no traigo todos los campos. Para que sea editable tiene tengo este evento del grid gvDatos_SelectedIndexChanged:
Dim row As GridViewRow
txtActivo.Text = "1"
row = gvDatos.SelectedRow
'para acceder a los datos de las columnas
txtNumero.Text = row.Cells(0).Text
ddlPais.SelectedValue = HttpUtility.HtmlDecode(row.Cells(3).Text)
conn = New SqlConnection(conexion)
conn.Open()
cmd = New SqlCommand("consulta  " & row.Cells(0).Text, conn)
Dim da As New SqlDataAdapter(cmd)
Dim dt As New DataTable
da.Fill(dt)
If dt.Rows.Count > 0 Then
txtConNom.Text = dt.Rows(0).Item("cve_contacto").ToString
txtNombres.Text = dt.Rows(0).Item("nombre").ToString
'txtPat.Text = dt.Rows(0).Item("apellido_pat").ToString
' txtMat.Text = dt.Rows(0).Item("apellido_mat").ToString
txtNumExt.Text = dt.Rows(0).Item("numero_exterior").ToString
txtNumInt.Text = dt.Rows(0).Item("numero_interior").ToString
txtNumDepto.Text = dt.Rows(0).Item("numero_depto").ToString
txtComentario.Text = dt.Rows(0).Item("comentario").ToString
txtCalle.Text = dt.Rows(0).Item("calle").ToString
txtCp.Text = dt.Rows(0).Item("codigo_postal").ToString
intento hacer esto pero me da error el error q te comente
'ddlEsado.SelectedValue = dt.Rows(0).Item("nombre").ToString
End If
conn.Close()
No se si con eso se suficiente... o algo más
Lo que debes de hacer es crear el evento valuetextchanged pero del lado de visual basic (no recuerdo muy bien como se llama el evento busca un evento que tenga un nombre similar) para cada listbox, y dentro de ese evento debe ir el selectcommand
OJO:
Un ejemplo en el evento de tu listbox país, ahí debe de ir el selectcommand de estado y en el evento de tu listbox estado deberá de ir el selectcommand de asentamiento y así sucesivamente.
Hola
Pues mira me sigue marcando el mismo error 'ddlEstado' tiene un SelectedValue que no es válido porque no existe en la lista de elementos. Nombre del parámetro: value
intente con estos dos eventos
Protected Sub ddlPais_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlEstado.SelectedIndexChanged
y el de:  Protected Sub ddlPais_TextChanged1(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlEstado.TextChanged
el codigo que pongo es el siguiente:
conn = New SqlConnection(conexion)
conn.Open()
cmd = New SqlCommand("select * from estados where cve_pais=(select cve_pais from paises where nombre= ' " & ddlPais.SelectedValue & " ')", conn)
Dim da As New SqlDataAdapter(cmd)
Dim dt As New DataTable
da.Fill(dt)
If dt.Rows.Count > 0 Then
ddlEstado.SelectedValue = dt.Rows(0).Item("nombre").ToString
End If
conn.Close()
Pero en cualquiera de los dos me marca el mismo error
1. ¿Una pregunta del lado de ASP borraste el código? ¿O lo dejaste?
2. ¿Cómo estas definiendo el selectdatasource de cada listbox? ¿Lo estas manejando con parámetros o no? Porque si lo manejas con parámetros unicamente deberías de mandar el parámetro y no hacer el new sqlcommand.
¿Hola
si deje el código en ASP lo debo quitar?
Y la forma como lleno el datasource es así
<asp:SqlDataSource ID="SqlDataSourceEdo" runat="server"
ConnectionString="<%$ ConnectionStrings:AGENDAConnectionString %>"
SelectCommand="SELECT * FROM ESTADOS WHERE (CVE_PAIS=(select cve_pais from Paises where nombre= @pais) )ORDER BY NOMBRE">
<SelectParameters>
<asp:ControlParameter ControlID="ddlPais" Name="pais"
PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource> (del de estado)
La verdad entiendo porque falla si para pasar los valores del listbox al grid y el hacer el registro en la base si lo hace pero a la inversa no; del grid al listbox
Yo lo hago de otra manera, al crear el listbox, utilizo el wizard para agregar el SqlDataSource y en el SqlDataSource agrego el Query que necesito incluyendo el parámetro a enviar. El mismo Wizard te pregunta cual es el valor a mostrar en pantalla y cual es el valor a utilizar para el que elija el usuario.
Y no tengo nada en el lado de ASP más que el mismo código que me genero VB.NET, ahora en el lado de VB.NET en el evento listbox_TextChanged. Envío el parámetro al sqldatasource y luego un rebind() para que me actualice el listbox.
Ok ya te entendí solo una cosa me podrías decir como envías el parámetro al sqldarasource y el rebind() en el evento listbox_TextChanged.
sqldatasource.parameters("nombre_parametro") = valor
listbox.databind(). La vez anterior me equivoque no es rebind, sino databind()
P.E.
en el sqldatasource  del listbox de estados tienes "select campo1, campo2 from ESTADOS where pais = @p_pais"
campo1 = codigo del estado
campo2 = descripcion del estado
private ddlPais_TextChanged (..........)
  sqldatasourceEstado.parameters("p_pais") = listboxpais.seletedvalue
  ddlEstado.databind()
end sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas