none
add y remove en listas RRS feed

  • Pregunta

  • una consulta con respecto a la consulta hecha aca

    https://social.msdn.microsoft.com/Forums/es-ES/65fcf9d4-eb2d-4ecb-8091-0a57743c98ef/remove-de-lista-de-entidades?forum=netfxwebes

    el add al igual que el remove funciona por referencia???

    lunes, 6 de julio de 2015 20:01

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

    a pesar que entra pero igual veo que siguen los mismo items 

    lunes, 6 de julio de 2015 16:53
  • 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

    lunes, 6 de julio de 2015 17:19
  • 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



    lunes, 6 de julio de 2015 17:53
  • 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

    lunes, 6 de julio de 2015 18:14
  • 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

    lunes, 6 de julio de 2015 18:43
  • 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);	
    }

    lunes, 6 de julio de 2015 18:59
  • >>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


    lunes, 6 de julio de 2015 19:32
  • 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

    lunes, 6 de julio de 2015 19:37
  • >>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

    lunes, 6 de julio de 2015 19:53
  • 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

    lunes, 6 de julio de 2015 20:01
  • 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

    lunes, 6 de julio de 2015 20:05
  • 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


    lunes, 6 de julio de 2015 23:28
  • 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

    martes, 7 de julio de 2015 13:40
  • 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


    martes, 7 de julio de 2015 14:26