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.