DbGrid ?? Como Listar um Campo da tabela=Boolean ??
08/07/2008
0
Por Favor:
Tenho um Campo na Tabela Sim/Nao ou seja o campo é Boolean.
Entao, quando listo a tabela no DbGrid os Valores da Coluna, me aparecem TRUE ou FALSE,
Eu Precisava que, quando o campo da tabela for=True, Listar no DBGRID ´PAGO´ , e quando o campo da tabela estiver=False, preciso listar ´ ´ ou NAO PAGO.
Aproveitando, outra duvida. mas com COMBOX.
Preciso listar na mesma linha o Cod do Cliente e o Nome. Eu Ja fiz uma vez, e agora, nao sei onde guardei o codigo, e nao estou mais conseguindo fazer.
dm.TbSetores.Open;
dm.TbSetores.First;
with dm.TbSetores do
while not eof do
begin
DbcNome.Items.Add(FieldValues[´NomObra´]) ;
DbcNome.Items.Add(FieldValues[´NomObra´]) ;
next;
end;
Desta forma, lista duas linhas, e eu queria assim: cod - Nome
Mui Atrenciosamente.
Jotas
Jotas
Posts
08/07/2008
Mazzi
Para cria-los basta clicar com o botao direito em cima do compoente tDatset(pode ser Table ou CDS), escolha a opcao CreateField,
e para Calculate, por exemplo, dê o nome do campo e tipo Como STRING
1.1 entre na propriedades do componete (table ou CDS) e procure o evento OnCalcFields e coloque :
if TableCampo.value=true then
campo_criado_como_calculate.asstring := ´PAGO´
else
campo_criado_como_calculate.asstring := ´NAO PAGO´;
-------------------------------------------------------------------------------
2- Problema em relacao a popular um componente Itens:
use concatencao de Cod+NomObra
exemplo:
DbcNome.Items.Add(´COD:´+Dmd.tbtbCodigo.asstring+´ ´+ FieldValues[´NomObra´]) ;
08/07/2008
Joaoshi
Ex.:
procedure SuaTabelaNomeDoCampoGetText(Sender: TField; var Text: String; DisplayText: Boolean); begin if Sender.asBoolean = true then Text := ´Sim´ else Text := ´--´; end;
11/07/2008
Jotas
Bomdia !!
Desculpem pela demora
Quero só dizer Obrigado Pela Dicas.... Tudo Certinho.. Quanto a do DbGrid, usei a do Joao (OnsetGetText)
Valeu Mesmo. Supimpa !!!
Jotas.
12/07/2008
Paullsoftware
dm.TbSetores.Open; dm.TbSetores.First; with dm.TbSetores do while not eof do begin DbcNome.Items.Add(FieldValues[´NomObra´]) ; DbcNome.Items.Add(FieldValues[´NomObra´]) ; next; end;
13/07/2008
Marco Salles
na escolha do[b:685f2f62ea] evento OnGetText [/b:685f2f62ea]... Sem duvida é um evento muito
indicado
Quanto a sua segunda Dúvida a concatenação das Strings ela funciona se for seguida de uma formatação do Tamanho dos campos , para que todos os campos Tenham o mesmo Tamanho
Porém segue abaixo uma solução mais profissional para esta situação
[b:685f2f62ea]1)Altere a Propriedade Style do ComboBox para csOwnerDrawFixed[/b:685f2f62ea]
[b:685f2f62ea]2)No Evento onDrawItem do Seu Combo Escreva o Codigo Abaixo[/b:685f2f62ea]
[u:685f2f62ea]P:S Meu ComboBox Estou Chamando de Cb1[/u:685f2f62ea]
procedure TForm1.cb1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var strVal,strAll:String; pos1,rWidth:integer; rc:TRect; arrWidth:Array[0..2] of integer; procedure AcrescentarColuna(i:integer); begin rc.Left:=Rect.Left+ arrWidth[i] +2; rc.Right:=Rect.Left + arrWidth[i+1] - 2; if i=0 Then begin rc.Top:=Rect.Top; rc.Bottom:=Rect.Bottom; pos1:=pos(´;´,strAll) end else begin strAll:=copy(strAll,pos1+1,length(strAll)-pos1); pos1:=pos(´;´,strAll); end; Strval:=copy(strAll,1,pos1-1); cb1.Canvas.TextRect(rc,rc.Left,rc.Top,strVal); cb1.Canvas.MoveTo(rc.Right,rc.Top); cb1.Canvas.LineTo(rc.Right,rc.Bottom); end; begin cb.Canvas.Brush.Style:=bsSolid; Cb.Canvas.FillRect(Rect); StrAll:=cb.Items[Index]; rWidth:=cb.Width; arrWidth[0]:=0; arrWidth[1]:=(rWidth div 2); arrWidth[2]:=2*(rWidth div 2); AcrescentarColuna(0); AcrescentarColuna(1); end;
Para qua o Codigo Funcione voce deve chamar Assim :
dm.TbSetores.Open; dm.TbSetores.First; with dm.TbSetores do while not eof do begin cb1.Items.Add(FieldByName(´SeuCampo1´).AsString+´;´+ FieldByName (´SeuOutroCampo´).AsString+´;´); next; end;
[b:685f2f62ea]é importante ou primordial usar a concatenação [color=darkblue:685f2f62ea][u:685f2f62ea]´,´[/u:685f2f62ea][/color:685f2f62ea][/b:685f2f62ea]
espero ter sido util
13/07/2008
Marco Salles
cb.Canvas.Brush.Style:=bsSolid; Cb.Canvas.FillRect(Rect); por cb1.Canvas.Brush.Style:=bsSolid; Cb1.Canvas.FillRect(Rect);
e
p:s
Veja apesar de ´grande´ a solução apresentada pode ser
facilmente estendida para [b:9fe6a79149]Tres , ou mais colunas [/b:9fe6a79149]no Combobox
sem praticamente nenhuma codificação extra..
Clique aqui para fazer login e interagir na Comunidade :)