Usuario
add y remove en listas

Pregunta
-
Todas las respuestas
-
saludos, este codigo no me esat funcionando
For Each item In listaCheckNoMarcado If listaMarcados.Contains(item) = True Then listaMarcados.Remove(item) For Each tramite In l_tramitedetalleNoMarcado If tramite.CodTramite.TrimStart("0") = item Then Dim var As String var = tramite.CodTramite.TrimStart("0") listaMarcadosTramite.remove(tramite) End If Next End If Next
no remueve de la listalistaMarcadosTramite
a pesar que entra pero igual veo que siguen los mismo items
- Combinado Karen MalagónModerator martes, 7 de julio de 2015 17:29 Preguntas relacionadas
-
hola
recuerda que el remove se realiza por referencia, enviar la variable "tramite" que apunta a otra lista no funciona
deberias localizar cual es la instancia de listaMarcadosTramite que corresponde con "tramite"
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
pense que generaba error hacer remove de una lista a la cual se le esta haciendo el for each
ese codigo estaria mal
For Each tramite In listaMarcadosTramite If tramite.CodTramite.TrimStart("0") = item Then Dim var As String var = tramite.CodTramite.TrimStart("0") listaMarcadosTramite.remove(tramite) End If
- Editado palermo_software lunes, 6 de julio de 2015 17:54
-
hola
si le pasas un objeto el cual no encuentra la referencia a lo sumo no removera ningun item
el error se genera si dentro del mismo foreach intentas eliminar un item de su propia lista
si el codigo que marcas estaria incorrecto, con el "tramite" deberias localizar el item dentro de "listaMarcadosTramite" que corresponde para eliminarlo
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
el error se genera si dentro del mismo foreach intentas eliminar un item de su propia listae
eso es exactamnete lo que quiero hacer
si el codigo que marcas estaria incorrecto, con el "tramite" deberias localizar el item dentro de "listaMarcadosTramite" que corresponde para eliminarlo
tendras algun ejemplo con codigo
-
este es un codigo que me pasaron hace algun tiempo estoy tratando de hacer lo mismo
TabPage page = tabControl1.TabPages[tabControl1.SelectedIndex]; List<DataGridView> temp = new List<DataGridView>(); foreach (Control c in page.Controls) { if (c is DataGridView) { temp.Add((DataGridView)c); } } foreach (DataGridView item in temp) { page.Controls.Remove(item); }
-
>>este es un codigo que me pasaron hace algun tiempo estoy tratando de hacer lo mismo
ok pero esto es algo muy distinto a lo que planteas
alli se remueve los controles usando una lista temporal
en tu ejemplo original estas definiendo foreach anidados y encima estan los datos desconectados
en este ejemplo buscas los controles en page.Controls y luego remueves del misma coleccion, cosa que no haces en tu codigo original
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Editado Leandro TuttiniMVP lunes, 6 de julio de 2015 19:33
-
-
>>eso es lo que quiero hacer uso una lista temporal para no eliminar los items de la lista original y no haya error. por eso reccoro la lista auxiliar y elimino de la otra
pero eso no es lo que refleja el codigo que tenias al principio
en el ejemplo en vb.net tienes 3 listas, cual es la original, cual quieres eliminar y cual es la temporal porque la verdad no se entiende
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
lo he hecho algo asi y me funciona
For Each item In listaCheckNoMarcado Dim var As String = "" Dim var1 As New ClsTramiteDetalleEN If listaMarcados.Contains(item) = True Then listaMarcados.Remove(item) For Each tramite In l_tramitedetalleNoMarcado If tramite.CodTramite.TrimStart("0") = item Then var = tramite.CodTramite.TrimStart("0") 'listaMarcadosTramite.Remove(tramite) End If For Each tramiteABorrar In listaMarcadosTramite If tramiteABorrar.CodTramite.TrimStart("0") = var Then var1 = tramiteABorrar End If Next listaMarcadosTramite.Remove(var1) Next End If Next
-
hola
para el add estas creando una entidad nueva por lo cual agregas a la lista la referencia a ese objeto que estas instanciando
o sea haces
Class1 obj1 = new Class1();
lista.Add(obj1);
cuando haces el new creas una instancia en el add agregas la referencia a ese objeto que esta en memoria
para eliminar debes localizar el item en la coleccion, por ende su referencia
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
hola
la verdad esta bastante retorcido el codigo, quizas funcione pero me parece que hay muchos For Each anidados y eso no esta bueno
la verdad es que viendo el codigo ni tengo idea para que lo utilizas
quizas si te animas a usar linq para ahcer mas simple la busqueda
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Editado Leandro TuttiniMVP lunes, 6 de julio de 2015 23:29
-
hola, podria ser correcto hacer un add asi
If listaMarcados.Contains(item) = False Then listaMarcados.Add(item) For Each tramite In l_tramitedetalleAuxiliar Dim var As String var = tramite.CodTramite.TrimStart("0") If tramite.CodTramite.TrimStart("0") = item Then listaMarcadosTramite.Add(tramite) End If Next End If
-
Hola estoy tratando de mantener el check en una grilla al momento de paginar,no solo el check sino tambien la información de la grilla
como podria con linq acortar algunos for each
Sub MantenerSeleccionENLAGRILLAXXX() Dim listaCheckMarcado As New List(Of Int32) Dim listaCheckNoMarcado As New List(Of Int32) Dim listaAuxiliar As New List(Of Int32) Dim listaTramiteDetalleAuxiliar As New List(Of ClsTramiteDetalleEN) Dim listaTramiteDetalleNoMarcado As New List(Of ClsTramiteDetalleEN) For Each fila As GridViewRow In gvMisDocs.Rows Dim codTramite As Int32 = Convert.ToInt32(gvMisDocs.DataKeys(fila.RowIndex).Values(2).ToString()) Dim e_tramitedetalle As New ClsTramiteDetalleEN If DirectCast(fila.FindControl("chkMarcado"), CheckBox).Checked Then With e_tramitedetalle .Anhotramite = .Id_dependencia = .CodTramite = .CodDetTramite = .FechaRecepcion = .FechaEnvio = .Id_Literal = .Literal = End With listaTramiteDetalleAuxiliar.Add(e_tramitedetalle) listaCheckMarcado.Add(codTramite) listaAuxiliar.Add(codTramite) Else listaCheckNoMarcado.Add(codTramite) With e_tramitedetalle .Anhotramite = .Id_dependencia = .CodTramite = .CodDetTramite = .FechaRecepcion = .FechaEnvio = .Id_Literal = .Literal = End With listaTramiteDetalleNoMarcado.Add(e_tramitedetalle) End If Next Dim listaMarcados As New List(Of Int32) listaMarcados = TryCast(HttpContext.Current.Session("Marcados"), List(Of Int32)) If listaMarcados Is Nothing Then listaMarcados = New List(Of Int32)() End If Dim listaMarcadosTramite As New List(Of ClsTramiteDetalleEN) listaMarcadosTramite = TryCast(HttpContext.Current.Session("ListaXXX"), List(Of ClsTramiteDetalleEN)) If listaMarcadosTramite Is Nothing Then listaMarcadosTramite = New List(Of ClsTramiteDetalleEN) End If 'SI AUN NO SE HA MARCADO NINGUN ITEM AGREGAR TODOS LOS MARCADOS DE LA PAGINA For Each item In listaCheckMarcado If listaMarcados.Count = 0 Then listaMarcados.AddRange(listaAuxiliar) listaMarcadosTramite.AddRange(listaTramiteDetalleAuxiliar) HttpContext.Current.Session("Marcados") = listaMarcados HttpContext.Current.Session("ListaXXX") = listaMarcadosTramite Return End If '/////////////////////////////////////////////////////// 'AGREGAR EL ITEM DE LA LISTA QUE HA SIDO CHECADO. If listaMarcados.Contains(item) = False Then listaMarcados.Add(item) For Each tramite In listaTramiteDetalleAuxiliar If tramite.CodTramite.TrimStart("0") = item Then listaMarcadosTramite.Add(tramite) End If Next End If Next '///////////////////////////////////////////////////// 'REMOVER EL ITEM DE LA LISTA QUE HA SIDO DESCHECADO -- For Each item In listaCheckNoMarcado Dim CodTramite As String = "" Dim objetoTramiteaDesmarcar As New ClsTramiteDetalleEN If listaMarcados.Contains(item) = True Then listaMarcados.Remove(item) For Each tramite In listaTramiteDetalleNoMarcado If tramite.CodTramite.TrimStart("0") = item Then CodTramite = tramite.CodTramite.TrimStart("0") End If For Each tramiteADesmarcar In listaMarcadosTramite If tramiteADesmarcar.CodTramite.TrimStart("0") = CodTramite Then objetoTramiteaDesmarcar = tramiteADesmarcar End If Next listaMarcadosTramite.Remove(objetoTramiteaDesmarcar) Next End If Next '///////////////////////////////////////////////////// HttpContext.Current.Session("Marcados") = listaMarcados HttpContext.Current.Session("ListaXXX") = listaMarcadosTramite End Sub
- Editado palermo_software martes, 7 de julio de 2015 14:31