Como apagar ou recuperar todas as linhas em uma Grid | Ti Responde 0154

No vídeo de hoje, vamos demonstrar em como apagar ou restaurar linhas apagadas em uma grid comum e em uma em MVC.

A dúvida de hoje, nos perguntaram, como seria possível percorrer as linhas de uma grid e apagar as linhas ou recuperá-las.

 

Pensando nisso, montamos um exemplo, onde vamos demonstrar em como interceptar as informações numa tela clássica (usando aCols) e em uma usando grid em MVC.

 

Segue abaixo o vídeo exemplificando:

 

E abaixo o código fonte desenvolvido:

//Bibliotecas
#Include "tlpp-core.th"

//Declaração da namespace
Namespace custom.terminal.youtube

/*/{Protheus.doc} User Function video0154
Função que percorre as linhas de um Array e vem apagando as linhas ou recuperando elas
@type  Function
@author Atilio
@since 29/04/2024
@param cGridName, Caractere, Nome da grid Detail em MVC
@example
    //Comum
    custom.terminal.youtube.u_video0154()

    //Em MVC
    custom.terminal.youtube.u_video0154("DA1DETAIL")
/*/

User Function video0154(cGridName)
    Local aArea              := FWGetArea() As Array
    Local nCurrentLine       := 0           As Numeric
    Local lLineStatus        := .F.         As Logical
    Local nDeletePosition    := 0           As Numeric
    Local oModelMain                        As Object
    Local oModelGrid                        As Object
    Default cGridName        := ""

    //Se a pergunta for confirmada
    If FWAlertYesNo("Deseja apagar/restaurar as linhas da grid?", "Confirma?")

        //Se for uma rotina em MVC
        If ! Empty(cGridName)
            //Busca os modelos em memória
            oModelMain  := FWModelActive()
			oModelGrid := oModelMain:GetModel(cGridName)

            //Percorrendo a grid com os itens
			For nCurrentLine := 1 To oModelGrid:Length()
				//Posicionando na linha atual
				oModelGrid:GoLine(nCurrentLine)

                //Se a linha tiver apagada, restaura ela
                If oModelGrid:IsDeleted()
                    oModelGrid:UndeleteLine()

                //Senão, apaga a linha
                Else
                    oModelGrid:DeleteLine()
                EndIf
            Next

            //Volta pra linha 1
            oModelGrid:GoLine(1)

        //Se for uma rotina clássica (tiver aCols)
        ElseIf Type("aCols") != "U"
            //Pega a posição da coluna que armazena se ta apagada a linha
            nDeletePosition := Len(aHeader) + 1

            //Percorre as linhas da grid
            For nCurrentLine := 1 To Len(aCols)
                //Busca o Status atual (se ta apagado ou não, e inverte ele com !)
                lLineStatus := ! GDDeleted(nCurrentLine)

                //Atualiza na grid
                aCols[nCurrentLine][nDeletePosition] := lLineStatus
            Next
        EndIf

        //Atualiza a tela
        GetDRefresh()
    EndIf

    FWRestArea(aArea)
Return

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação