Olá Pessoal, estou com um problema em replicar dados de uma Grid para outra...Tenho uma
rotina X com Grid, e ao apertar um botão abre uma rotina Y também com Grid, ambas em MVC.
ao alterar os dados de ambas as Grids quero que elas recebam os mesmo dados alterados. O problema é que a primeira linha de ambas as Grids ficam vazias. só na segunda linha que é preenchida com os dados alterados.
Como são dois Fontes, vou separa-los aqui
Tela Principal:
//Define os dados para o Objeto da Classe NF
User Function AbreDT()
Local cProduto := ""
Local nLinha := 1
Local oModel := FwModelActive()
Local oView := FwViewActive() //Objeto da View, adicionado para dar refresh após adicioar uma nova linha
Local oGrid := Nil
Local nTotLin
oModel:GetModel("CABEC")
//Pegando os dados da Grid
oGrid := oModel:GetModel("CABEC_ITENS")
nTotLin := oGrid:Length(.F.)
For nLinha := 1 To nTotLin
//Posicionando na linha atual
oGrid:GoLine(nLinha)
//Se a linha tiver deletada
If oGrid:IsDeleted()
/* ... */
//Senão, se não for inserção
ElseIf ! oGrid:IsInserted()
//POSIONAR NO CAMPO ALTERADO
cProduto := oGrid:GetValue("PRODUTO_PROTHEUS") //Pegando conteudo da Grid campo PRODUTO
If (!Empty("PRODUTO_PROTHEUS"))
oItemNF:SetProdProtheus(cProduto)
//...set dos campos que são alterados
//..set dos campos que são alterados
EndIf
EndIf
Next
oGrid:SetLine(1)
// Atualiza toda a tela*
oView:getModel("CABEC_ITENS")
//oGrid:goLine(nLinha)
U_NFLNFE02(oView) //Função Tela de Detalhes
oView:deActivate()
oView:activate()
Return()
Fonte da Segunda Grid, Tela de Detalhes
User Function NFLNFE02(oView)
Local aArea := GetArea()
Local aEnableButtons := {}
Local nRet := 1
aEnableButtons := { { .F., Nil }, { .F., Nil }, ;
{ .F., Nil }, { .F., Nil }, ;
{ .F., Nil }, { .F., Nil }, ;
{ .T., Nil }, { .T., Nil }, ;
{ .F., Nil }, { .F., Nil }, ;
{ .F., Nil }, { .F., Nil }, ;
{ .F., Nil }, { .F., Nil } } //"Confirmar"###"Fechar"
oModelDT := FWLoadModel("NFLNFE02")
oModelDT:SetOperation(4)
oModelDT:Activate()
oMdlGrid:= oModelDT:getModel("GRID_ITENS")
oMdlGrid:SetLine(1)
nRet := FWExecView("e" , "NFLNFE02", 4, /*oDlg*/, ,/* bOk*/ ,0/*nPercReducao*/, aEnableButtons, /*bCancel*/ , /*cOperatId*/, /*cToolBar*/, oModelDT)
if nRet == 0 /*Confirmação da tela*/
FWMsgRun(,{|| CursorWait(), oView:deActivate(), oView:activate(), CursorArrow() }, "NFLNFE02", "Atualizando...")
endIf
RestArea(aArea)
Return
Obs: Na imagem está o campo que ter que ser atualizado/alterado em ambas as Grid, é o o campo (Produto) na primeira linha vem em brando, na linha de baixo ele carrega o dado alterado. o resto dos campos tem um carregamento diferente já que utilizo um objeto, então já estão pré carregados.
Obriga desde já!