Fórum DBGrid Zebrado #259924
25/11/2004
0
Estou tentando fazer um DBGrid zebrado... até aí não tive problemas.
Só que todos os exemplos que eu ví são com Table e o programa em que estou querendo colocar usa uma Query.
O exemplo que estou utilizando funciona normalmente com Table mas não com Query
[b:3504537717]{ se a posição física (recno) do registro for par }
if (Table1.recno mod 2) = 0
then begin
{ pinta somente as células que não estão selecionadas }
if not (gdSelected in State)
then begin
{ define cor de fundo }
dbgrid1.Canvas.Brush.Color := $00FFEFDF;
{ pinta a célula }
dbgrid1.Canvas.FillRect(rect);
{ pinta o texto padrão }
dbgrid1.DefaultDrawDataCell(rect,column.Field,state);
end;
end;[/b:3504537717]
Alguem utiliza com Query?
Sds
Heitor R. Censi
Hrcensi
Curtir tópico
+ 0Posts
25/11/2004
Gurc
Coloque um break point na linha onde retorna o RecNo e veja se algo está realmente sendo retornado. Essa propriedade vem da classe TDataSet e não necessariamente precisa ser implementada, talvez o erro esteja aí. Você, provavelmente está usando BDE, pois com DBX você não ligaria a query direto no DBGrid, certo? Se você estiver ligando o DBGrid a um ClientDataSet você deve usar o RecNo do ClientDataSet.
Já usei muitas vezes esse recurso de pintar a linha. Mas eu ligo a um ClientDataSet, não a um TQuery. Você pode fazer isso também.
Até mais,
Gustavo Royer Chaurais
Gostei + 0
25/11/2004
Hrcensi
Fiz mais uns testes e notei que ele funciona normalmente com Table e Query qdo utilizo tabelas paradox, mas o programa principal utiliza Oracle e com ele o DBGrid Zebrado não funciona.
Recno no Oracle retorna sempre 1 e por isso ele não deixa zebrado.
Sds
Heitor R. Censi
hrcensi@hotmail.com
Gostei + 0
25/11/2004
Gurc
Eu usaria o ClientDataSet. Para usá-lo, ligue-o a um provider e então ao seu DataSet, não esquecendo de colocar a propriedade UniDirectional do seu DataSet para false, o ClientDataSet agora proverá o cache dos dados.
Você já pensou em usar dbExpress ao invés de BDE? Realmente seria um grande avanço.
Abraços,
Gustavo Royer Chaurais
Gostei + 0
25/11/2004
Gandalf.nho
Gostei + 0
25/11/2004
Gurc
Gostei + 0
25/11/2004
Hrcensi
Toda palavra acentuada aparece com caracteres diferentes.
Estou fazendo um teste com o clientdataset e ele não reconhece a linha clientdataset1.Canvas.Brush.Color := $00FFEFDF
Gostei + 0
25/11/2004
Gurc
Se você quer pintar a linha tem que fazer isso no DBGrid.
Até mais,
Gustavo Royer Chaurais
Gostei + 0
25/11/2004
Hrcensi
Burrada das feias...
Já estou viajando na maionese.
Gostei + 0
26/11/2004
Silviogs
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, DBTables, Grids, DBGrids, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
DBGrid1: TDBGrid;
Table1: TTable;
DataSource1: TDataSource;
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.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
If odd(Table1.RecNo) then
begin
DBGrid1.Canvas.Font.Color:= clWhite;
DBGrid1.Canvas.Brush.Color:= clGreen;
end
else
begin
DBGrid1.Canvas.Font.Color:= clBlack;
DBGrid1.Canvas.Brush.Color:= clWhite;
end;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.TextOut(Rect.Left+2,Rect.Top,Column.Field.AsString);
end;
Atenciosamente,
Silvio Guedes
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)