Implementação de posicionamento e coloração de linhas no DBGrid em DELPHI
Ao operar um sistema de banco de dados, descobri que a linha de dados no controle DBGrid não pôde ser posicionada e que após localizar uma determinada linha, a linha atual não pôde ser claramente marcada (como alterar a cor após pesquisar muito). informações, descobri que basicamente não há introdução a este conteúdo, incluindo algumas cores dinâmicas da linha superior. Artigos como Se falavam sobre operações realizadas durante a inicialização dos dados, mas não tinham a função de reposicionamento após a atualização da fonte de dados, então resolvi resolver esse problema. Depois de uma manhã pesquisando no DELPHI e revisando as informações relacionadas, encontrei um pouco. Xiaocheng, agora escreva e aprenda com todos os meus colegas. Por favor, me dê alguns conselhos sobre qualquer inadequação.
Primeiro, procurei nos controles Ttable e Tquery e não encontrei nenhum método que pudesse localizar diretamente a linha de dados. Também procurei no DBGrid e não encontrei nenhuma função correspondente que pudesse localizar diretamente uma determinada linha de dados. conjunto de dados. Após esforços contínuos, finalmente encontrei um método em TdataSet: GoToBookmark Este método pode fazer com que o ponteiro de registro no DBGrid atual aponte para a linha que você precisa especificar.
Depois de encontrar este método, o problema está apenas parcialmente resolvido. A cor da linha de dados apontada pelo ponteiro atual também deve ser alterada, ou seja, a linha atualmente selecionada deve ser marcada de forma óbvia (exceto a pequena). e estranho no DBGrid). (Exceto para marcadores óbvios) Isso é obviamente implementado no controle DBGrid. Há um evento OnDrawDataCell no controle DBGrid.
O processo de uso específico é o seguinte:
(1) Posicionar linhas de dados dinamicamente
//============================================== ===============
//Nome do processo: DyDbgDataLine
//Autor: haitiano
//Data: 22/02/2003
//Função: Mover automaticamente para uma linha de dados no controle DBGrid que atenda a esta condição com base nas condições especificadas pelo usuário
//Parâmetros de entrada:
// sValue: O valor da linha que precisa ser movida atualmente;
// tab: dados da tabela correspondente no DBGrid atual;
//dsr: a fonte de dados que atualmente precisa ser operada;
//Valor de retorno: Nenhum
//Modifica registros:
//============================================== ================
Procedimento DyDbgDataLine(sValue:string;tab:Ttable;dsr:TDatasource)
var
marcador:TBookMark;
começar
//Grava a linha atualmente marcada;
marcador:=self.tab.GetBookmark;
self.tab.primeiro;
enquanto não self.tab.Eof faça
começar
se self.tab.FieldByName('cpbh').AsString= sValue então
começar
marcador:=self.tab.GetBookmark;
quebrar;
fim;
self.tab.Próximo;
fim;
self.dsr.DataSet.GotoBookmark(ponteiro(marcador));
Fim;
Descrição: A tabela utilizada foi vinculada ao DBGrid na interface de exibição atual;
(2) Altere a cor para marcar a linha de dados atual
Primeiro, defina a propriedade DefaultDrawing de DBGrid como false e depois chame a seguinte função na função de evento OnDrawDataCell:
//============================================== ===============
//Nome do processo: DrawLine
//Autor: haitiano
//Data: 22/02/2003
//Função: Alterar a cor da linha especificada no Dbgrid como marca;
//Parâmetros de entrada:
// zdm: nome do campo;
// Rect: uma unidade da linha que precisa ser inserida e encerrada;
// Campo: campo atualmente exibido;
// estado: o status de exibição da linha atual;
// zdz: O valor da linha que precisa ser movida atualmente;
// tab: dados da tabela correspondente no DBGrid atual;
//dbg: DBGrid que atualmente precisa ser operado;
//Valor de retorno: Nenhum
//Modifica registros:
//============================================== ================
procedurDrawLine(tab:Ttable;const Rect:Trect;Campo:Tfield;estado:TgridDrawState;dbg:TDBGrid)
começar
se (tab.fieldbyname(zdm).asstring=zdz)então
começar
dbg.canvas.font.color:=clred;
dbg.canvas.brush.color:=clyellow;
fim;
dbg.DefaultDrawDataCell(Rect,Campo,Estado);
fim;