Alguem que entenda de DbGrid

26/05/2003

1

Pessoal eu gostaria de saber se tem como eu colocar uma marquinha em uma linha especifica de um dbgrid(nao e colorir) por exemplo:
O usuario preenche a tabela e se ele preencher o campo da observação queria deixar algo nessa linha que ele pudesse saber que o campo da observação esta preenchido naquele registro. Obrigado


Responder

Posts

26/05/2003

Ma_cunhado

eu acho que a maneira mais facil é verificar se o campo está em branco ou nao
assim

if Trim(query1.fieldbyname(´observacao´).asString)<>´´ then
//tá preenchido
else
// nao esta


Responder

27/05/2003

Cruz

Visite [url=http://www.jczdesign.com]JCZ Design Fotografia[/url]

[b:7e4bdd3184]Como criar uma coluna neutra em um TDBGrid.[/b:7e4bdd3184]
Por José Cruz.

Se vc possui um campo longo, do tipo memo por exemplo, e quer indicar em um DBGrid que este campo não está vazio. Usando, por exemplo, um sinal de que aquele registro possui uma observação. Vc
pode usar a técnica descrita abaixo.

1) De duplo clique sobre o DBGrid onde quer criar a coluna neutra.
2) Na caixa ´Editing DBG... Columns´ clique no ícone ´New item´
3) Selecione o item criado. (obs: não atribua nenhum campo à esta coluna.
Deixe a propriedade FieldName em branco)
4) Clique na propriedade Title para expandi-la e mude a sub-propriedade ´Caption´
para o que vc quiser. (Ex. ´*´, ou ´#´)
5) Mude a proprieade ´Width´ para 15.

Selecione novamente o DBGrid em questão.
No evento OnDrawColumnCell do DBGrid em questão escreva o código abaixo.
//inicio do código
   with DBGrid1.DataSource.DataSet,DBGrid1 do {troque dbgrid1 pelo nome do seu
      dbgrid}
   begin
      if(Trim(FieldByName(´obs´).Text) <> ´´) then  {troque ´obs´ pelo campo
         que vd quer verificar}
         if(Column.Index = 0) then
         begin
            Canvas.Font.Color:= clRed;
            Canvas.TextOut(Rect.Left+2,Rect.Top+2,´#´);
         end;
   end;
//fim do código


Veja abixo o exempo completo. Para usá-lo crie uma nova aplicação.
Coloque um ClientDataset, um DataSource e um DBGrid no form. Deixe o nome do form como Form1.
Substitua o bloco entre ´Interface e end.´ pelo código abaixo.

//inicio do bloco ->
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBClient, Grids, DBGrids;

type
  TForm1 = class(TForm)
    ClientDataSet1: TClientDataSet;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    ClientDataSet1nome: TStringField;
    ClientDataSet1obs: TStringField;
    ClientDataSet1temp: TStringField;
    procedure FormCreate(Sender: TObject);
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
   s:string;
begin
   s:= ExtractFilePath(Application.ExeName)+´tmp.cds´;
   ClientDataSet1.FileName:= s;
   if(not FileExists(s)) then
   begin
      ClientDataSet1.CreateDataSet;
      ClientDataSet1.SaveToFile(s);
   end;
   ClientDataset1.Open;
end;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
   with DBGrid1.DataSource.DataSet,DBGrid1 do {troque dbgrid1 pelo nome do seu
      dbgrid}
   begin
      if(Trim(FieldByName(´obs´).Text) <> ´´) then  {troque ´obs´ pelo campo
         que vd quer verificar}
         if(Column.Index = 0) then
         begin
            Canvas.Font.Color:= clRed;
            Canvas.TextOut(Rect.Left+2,Rect.Top+2,´#´);
         end;
   end;
end;
//fim do bloco



[b:7e4bdd3184][/b:7e4bdd3184]


Responder

23/02/2008

Robusto

Esse tópico me ajudou a resolver um outro problema, vlw!


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira