Como eu pode disparar um manipulador de eventos após um valor em uma TcxGrid mudou?
-
09-09-2019 - |
Pergunta
Eu tenho um TcxGrid DevExpress, com um manipulador de eventos anexado ao evento OnEditValueChanged de seu GridView que é suposto para resumir alguns dados em uma das colunas. O problema é que este evento é disparado durante a validação, antes que o valor atualizado foi escrito para o conjunto de dados subjacente. Eu não estou muito familiarizado com o TcxGrid. Alguém sabe se existe uma maneira para disparar um manipulador de eventos após o conjunto de dados foi atualizado?
Solução
Que tal usar o evento DataSource.OnDataChange?
Outras dicas
Eu não tenho certeza se isso é exatamente o que você precisa, mas eu descobri a opção ImmediatePost da grade para ser muito útil para situações em que eu preciso atualizar um resumo - é enterrado sob sua propriedade Controlador de Dados do cxView . Isso faz com que o ato de grade como uma planilha - assim que o usuário pressionar Enter ou Tab em uma célula, o registro é postado. Então eu teria meu fogo evento resumindo a partir do evento AfterPost do conjunto de dados, talvez?
(Você provavelmente já sabe disso, mas o próprio gridview tem um monte de opções Resumindo muito úteis incorporadas a ele - olhar para as propriedades de resumo das colunas, e certifique-se ShowFooter é definido como verdadeiro nas ViewOptions - por isso, se o seu resumo é um total relativamente simples ou médio ou similar, deixe a grade fazer tudo e poupar algum trabalho.)
Você usa a cxTableView ou cxDBTableView na cxGrid
Se você usa o cxDBTableView seguida, definir o seu evento no datasource.onchange da fonte de dados ligados na propriedade do cxDBTableView. (CxDBTableView .datacontroller.datasource)
Eu iria com skamradt:. Olhar mais atentamente para um evento que corresponda às suas expectativas
Caso contrário, você pode conectar seu evento depois de ter certeza de seus dados é inicializado:
procedure TMyGrid.MyProc_OnDataLoaded( Sender : TObject ); //I made up this event, I'm not sure it exists
begin
Self.OnEditValueChanged := MyProc_OnEditValueChanged;
end;
Eu recomendo fortemente que você não use isso como um habbit developping regulares (fazendo um evento definir outra chamada de retorno através de código é uma maneira de depuração inferno), mas se você realmente não encontrar nenhuma outra maneira de fazê-lo. ..