Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema al quitar de un listbox

Estas en el tema de Problema al quitar de un listbox en el foro de .NET en Foros del Web. Hola buenos dias, tengo el siguiente problema.Tengo una pagina, con un combo que tiene unos clientes, y un listbox que agrego los clientes del listbox ...
  #1 (permalink)  
Antiguo 03/06/2010, 03:54
 
Fecha de Ingreso: julio-2009
Mensajes: 60
Antigüedad: 14 años, 9 meses
Puntos: 0
Problema al quitar de un listbox

Hola buenos dias, tengo el siguiente problema.Tengo una pagina, con un combo que tiene unos clientes, y un listbox que agrego los clientes del listbox y dos botones, uno para agregar del combo al listbox y otro para quitarlo.Tambien tengo un boton que me hace la busqueda del codigo del cliente y me lo pone en el combo,es decir una busqueda del combo.
El problema que tengo es que si selecciono del combo y añado, al quitar cualquier elemento insertado no tengo problema, pero sin embargo, lo busco con el boton de busqueda y lo añado, siempre me quita del listbox el primero.El problema que tengo es que el selectedindex me toma siempre 0, aunque halla 3 elementos, por lo tanto al quitar un elemento siempre me coge el primero.
Aqui os pongo el codigo que tengo de quitar del listbox.
Si necesitais mas informacion comentarmelo que lo pongo.

Protected Sub img_quitar_distribuidor_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles img_quitar_distribuidor.Click
'Quitamos el elemento seleccionado del listbox
If Me.lst_distr_seleccionados.SelectedIndex > -1 Then
Me.lst_distr_seleccionados.Items.Remove(Me.lst_dis tr_seleccionados.SelectedItem)
'Me.HiddenField_modificado.Value = 1
End If
end sub
  #2 (permalink)  
Antiguo 03/06/2010, 05:06
 
Fecha de Ingreso: junio-2010
Mensajes: 49
Antigüedad: 13 años, 10 meses
Puntos: 2
Respuesta: Problema al quitar de un listbox

Cita:
Protected Sub img_quitar_distribuidor_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles img_quitar_distribuidor.Click
'Quitamos el elemento seleccionado del listbox
Dim n as integer = Me.lst_distr_seleccionados.SelectedIndex
If n > -1 Then
Me.lst_distr_seleccionados.Items.RemoveAt(n)
'Me.HiddenField_modificado.Value = 1
End If
end sub
Asi para una selección modo "single" deberia bastar.
  #3 (permalink)  
Antiguo 03/06/2010, 05:37
 
Fecha de Ingreso: julio-2009
Mensajes: 60
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Problema al quitar de un listbox

partimos de la base que has puesto lo mismo que yo, dado que n es el Me.lst_distr_seleccionados.SelectedIndex, con lo cual no se ha cambiado gran cosa. El problema actual que existe es que siempre me toma el valor 0 el Me.lst_distr_seleccionados.SelectedIndex si tengo dos valores y por tanto me toma el pirmer valor del listbox a eliminar.
Gracias por tu ayuda pero sigo en las mismas.
Ademas es un modo multiple, con lo cual la solucion no es valida, pero gracias por intentarlo.
  #4 (permalink)  
Antiguo 03/06/2010, 06:12
 
Fecha de Ingreso: junio-2010
Mensajes: 49
Antigüedad: 13 años, 10 meses
Puntos: 2
Respuesta: Problema al quitar de un listbox

Fijate en una cosa...

Cita:
Me.lst_distr_seleccionados.Items.Remove(Me.lst_dis tr_seleccionados.SelectedItem)
vs

Cita:
Me.lst_distr_seleccionados.Items.RemoveAt(n)
Tu haces un remove al item seleccionado.... yo hago un removeat (posicion) tomado del indice seleccionado por lo que no tomaria el valor de cero si no el valor del indice... es exactamente lo que quieres.

Ahora bien, si lo que quieres es hacerlo en modo de seleccion multiple, primero debes obtener la coleccion de indices seleccionados.

Cita:
Dim n() As Integer = Me.ListBox1.GetSelectedIndices

Dim l As Integer = n.GetUpperBound(0)

For i = l To 0

Me.ListBox1.Items.RemoveAt(n(i))
Next
Declaramos un array contenedor de indices y lo igualamos al metodo que obtiene dichos indices.

Declaramos una variable numerica y la igualamos al indice maximo del array.

Mediante un bucle inverso eliminamos el item del listbox alojado en el indice obtenido de nuestro array de indices.

Ahora preguntaras.... ¿Porque un inverso y no uno normal o un for each? Bien, si tu tienes seleccionado por ejemplo el indice 3 y el 5.... al eliminar el 3 el 5 dejaria de ser 5 y ahora seria 4, por lo que o te da un fallo de fuera de limites al no existir ya el 5 o te elimina el que no es. Al hacerlo inverso, si eliminamos el 5 primero el 3 sigue siendo el 3.

Si te hubieses fijado bien en el codigo que te puse antes o lo hubieses probado, te habrias dado cuenta de la sutil pero necesaria modificacion dentro de el.


Prueba este y me cuentas. Un saludo!



P.D. No sera esto parte de una web verdad?

Última edición por Korreca; 03/06/2010 a las 06:31 Razón: Pregunta

Etiquetas: listbox, quitar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:52.