ALTERAR APENAS A LINHA ALTERADA.
minha dúvida é até a que perguntei em outro tópico mais eu esqueci de aproveitar aquele e fechei.
mais é o seguinte. eu trago numa flexgrid uma porrada de registro. e quando eu der um duplo clica em uma liha da grid irá abrir um form com os dados para eu poder alterar. então eu queria saber o seguinte: quando eu alterar alguma informação no form e e clicar em gravar meu form vai fechar... queria saber como eu faço para atualizar apenas a linha do grid do registro q eu alterei? fiz q tem lá o refresh mais naum adiantou.
mais é o seguinte. eu trago numa flexgrid uma porrada de registro. e quando eu der um duplo clica em uma liha da grid irá abrir um form com os dados para eu poder alterar. então eu queria saber o seguinte: quando eu alterar alguma informação no form e e clicar em gravar meu form vai fechar... queria saber como eu faço para atualizar apenas a linha do grid do registro q eu alterei? fiz q tem lá o refresh mais naum adiantou.
é simples...no seu form (onde altera os dados) quando clicar em gravar e antes de fechá-lo, vc faz o seguinte:
NomeFormOndeEsta_o_Grid.msflexgrid.text.TextMatriz(lLinha,lCol) = txtDado.text ' O txtDado.text é do form que vc abre para alterar o dado.
Detalhe: No msFlexGrid no evento (click ou double click) vc deve armazenar a linha e coluna atual do grid em duas variaveis (global ou publica do form), pois vc irá usar conforme exemplo acima:
NomeFormOndeEsta_o_Grid.msflexgrid.text.TextMatriz(lLinha,lCol) = txtDado.text
NomeFormOndeEsta_o_Grid.msflexgrid.text.TextMatriz(lLinha,lCol) = txtDado.text ' O txtDado.text é do form que vc abre para alterar o dado.
Detalhe: No msFlexGrid no evento (click ou double click) vc deve armazenar a linha e coluna atual do grid em duas variaveis (global ou publica do form), pois vc irá usar conforme exemplo acima:
NomeFormOndeEsta_o_Grid.msflexgrid.text.TextMatriz(lLinha,lCol) = txtDado.text
voce pode colocar assim:
'Quando Abrir o Formulario e o cara alterou os dados e clicou no botao alterar ai você faz assim:
Formulario_que_fez_chamada.Seu_flexgrid.TextMatrix(Grid.Row,1)=text2.text
Formulario_que_fez_chamada.Seu_flexgrid.TextMatrix(Grid.Row,2)=text3.text
Formulario_que_fez_chamada.Seu_flexgrid.TextMatrix(Grid.Row,3)= text4.text
Ve se funciona...
'Quando Abrir o Formulario e o cara alterou os dados e clicou no botao alterar ai você faz assim:
Formulario_que_fez_chamada.Seu_flexgrid.TextMatrix(Grid.Row,1)=text2.text
Formulario_que_fez_chamada.Seu_flexgrid.TextMatrix(Grid.Row,2)=text3.text
Formulario_que_fez_chamada.Seu_flexgrid.TextMatrix(Grid.Row,3)= text4.text
Ve se funciona...
só q eu tenho q alterar de um jeito sem precisar passar os campos textos.
tipo pra remover uma linha do grid depois q clica em excluir fiz isso: If m_Acao = AC_EXCLUSAO And m_Gravou Then
If m_GridForm.Rows = 2 Then
m_GridForm.Rows = 1
Else
m_GridForm.RemoveItem m_iIndex
End If
End If
teria q ser mais ou menos assim. o problema é q naum tem um metodo para alterar. tentei o refresh mais naum adianta.
tipo pra remover uma linha do grid depois q clica em excluir fiz isso: If m_Acao = AC_EXCLUSAO And m_Gravou Then
If m_GridForm.Rows = 2 Then
m_GridForm.Rows = 1
Else
m_GridForm.RemoveItem m_iIndex
End If
End If
teria q ser mais ou menos assim. o problema é q naum tem um metodo para alterar. tentei o refresh mais naum adianta.
Amigo você que alterar o que?
O flexgrid não é vinculado, entao nao tem como refresh atualizar OS DADOS a partir de um banco de dados. O refresh está atualizando a exibição do grid. Se vc nao fizer o que o FRAU ou VBAPRENDE disseram, nunca vai atualizar o grid. Se quiser um grid vinculado, utilize o DataGrid:
Abra um recordset (e deixe aberto) e mande este comando
set datagrid.datasource = rs
Pronto, seu grid é vinculado, assim refresh funciona, mas mesmo assim tem que reabrir o rs, para pegar os dados atuais da tabela.
Abra um recordset (e deixe aberto) e mande este comando
set datagrid.datasource = rs
Pronto, seu grid é vinculado, assim refresh funciona, mas mesmo assim tem que reabrir o rs, para pegar os dados atuais da tabela.
então eu coloquei assim:
frmSharedListaCadastro.grdLista.TextMatrix(frmSharedListaCadastro.grdLista.Row, 1) = txtDescricao.Text
só q está me dando erro de subscript out range.
esse form frmSharedListaCadastro.grdLista é q o tem a grid com os dados.
o campo txtDescricao.Text é o campo q eu alterei. depois q eu cliquei m gravar deu esse erro acima, pq?
frmSharedListaCadastro.grdLista.TextMatrix(frmSharedListaCadastro.grdLista.Row, 1) = txtDescricao.Text
só q está me dando erro de subscript out range.
esse form frmSharedListaCadastro.grdLista é q o tem a grid com os dados.
o campo txtDescricao.Text é o campo q eu alterei. depois q eu cliquei m gravar deu esse erro acima, pq?
Isso acontece porque a linha que você ta mandando imprimir frmSharedListaCadastro.grdLista.Row ela não existe ou é a primeira linha aonde fica o cabeçalho.
só q a linha q estou clicando existe sim.
tanto q quando aparece o form os campos vem preenchidos.
tanto q quando aparece o form os campos vem preenchidos.
tem um outro problema. essa minha tela q tem a grid serve para todos os cadastros q tem no sistema. as vezes muitos dos campos de um form naum vão corresponder nessa coluna do grid.
RAFA.CRM eu o VBAPRENDE e o FGSANTOS já postamos a solução com MSFLEXGRID...se vc quer de outro jeito use o DATAGRID (Conforme exemplo do FGSANTOS)...
Tópico encerrado , respostas não são mais permitidas