Selecionar Registros DBGrid

Delphi

30/09/2008

Saudações!

Tenho um problema, até encontrei uma solução, mas na minha opinião não é a mais adequada. Tenho uma tela de prontuário eletrônico, que foi criada por outro programador, que contém um dbgrid. Este possui 3 colunas: Sim (AT_TMP_SIM), Item (CF_ITEM_NOM) e Descrição(AT_CLIN_TEX). Há uma quarta que fica oculta (CF_ITEM_COD). A coluna Sim é virtual, e ela possui checkbox, onde o médico seleciona o item desejado. A questão é que ele não pode selecionar todos os registros, ou seja, se ele seleciona um, quando clicar no outro, o tick do anterior tem que sair, exatamente como ocorre com um radiobuttom.

Por exemplo:

Sim Item Descrição
x Distância p.trago < 15 cm
Distância p.trago 15 a 30 cm
Distância p.trago > 30 cm
Flexão Lombar > 4 cm
x Flexão Lombar 2 a 4 cm
Flexão Lombar < 2 cm

Veja que dos 3 primeiros registros, o médico só pode ticar 1, por se tratar de um mesmo contexto. Da mesma forma ocorre com os outros registros. Há 5 grupos de registros onde, em cada grupo, o médico só pode ticar em um, tudo isso exibido num mesmo grid.

A solução que eu encontrei foi a seguinte:

procedure TfrmAtendimento.SelecionaItemBASMI;
begin
with dmAtendimento do
begin
vMarcaRegistro := dbgItem.DataSource.DataSet.Bookmark;
case cdsAten_TempCF_ITEM_COD.AsInteger of
12764, 12767, 12770, 12773, 12776:
begin
cdsAten_Temp.Edit;
cdsAten_TempAT_TMP_SIM.AsString := ´S´;
cdsAten_Temp.Next;
cdsAten_Temp.Edit;
cdsAten_TempAT_TMP_SIM.AsString := ´´;
cdsAten_Temp.Next;
cdsAten_Temp.Edit;
cdsAten_TempAT_TMP_SIM.AsString := ´´;
end;
12765, 12768, 12771, 12774, 12777:
begin
cdsAten_Temp.Edit;
cdsAten_TempAT_TMP_SIM.AsString := ´S´;
cdsAten_Temp.Prior;
cdsAten_Temp.Edit;
cdsAten_TempAT_TMP_SIM.AsString := ´´;
cdsAten_Temp.Next;
cdsAten_Temp.Next;
cdsAten_Temp.Edit;
cdsAten_TempAT_TMP_SIM.AsString := ´´;
end;
12766, 12769, 12772, 12775, 12778:
begin
cdsAten_Temp.Edit;
cdsAten_TempAT_TMP_SIM.AsString := ´S´;
cdsAten_Temp.Prior;
cdsAten_Temp.Edit;
cdsAten_TempAT_TMP_SIM.AsString := ´´;
cdsAten_Temp.Prior;
cdsAten_Temp.Edit;
cdsAten_TempAT_TMP_SIM.AsString := ´´;
end;
end;
dbgItem.DataSource.DataSet.Bookmark := vMarcaRegistro;
end;
end;


No evento onclick do dbgrid:

with dmAtendimento.dsAten_temp.DataSet do
begin
if (Column.Field = FieldByName(´AT_TMP_SIM´)) and (FieldByName(´CF_OR_ITEM_TIP_DADO´).AsString <> ´O´) then
begin
...
SelecionaItemBASMI;
...
end;
end;

No ondrawcolumncell
...
{pinta checkbox}
with dmAtendimento.dsAten_temp.DataSet do
begin
if Column.Field = .FieldByName(´AT_TMP_SIM´) then
begin
pos := Column.Width;
pos := (pos div 2)-6;
dbgItem.Canvas.FillRect(Rect);
ImageList1.Draw(dbgItem.Canvas, Rect.Left + pos, Rect.Top + 1, 0);
if FieldByName(´CF_OR_ITEM_TIP_DADO´).AsString = ´O´ then
ImageList1.Draw(dbgItem.Canvas, Rect.Left + pos, Rect.Top + 1, 2)
else if FieldByName(´AT_TMP_SIM´).AsString = ´S´ then
ImageList1.Draw(dbgItem.Canvas, Rect.Left + pos, Rect.Top + 1, 1)
else
ImageList1.Draw(dbgItem.Canvas, Rect.Left + pos, Rect.Top + 1, 0);
end;
...

Gostaria de uma opinião de vcs e caso tenham uma sugestão melhor, por favor postem e ficarei muito grato.

Abraços,[code:1:9eb8dcdc27][/code:1:9eb8dcdc27]


Roger1976

Roger1976

Curtidas 0
POSTAR