Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Filtro en columnas del DBGRID (https://www.clubdelphi.com/foros/showthread.php?t=74932)

cmfab 19-07-2011 14:54:33

Filtro en columnas del DBGRID
 
Hola a todos, quisiera preguntar si alguien conoce del algun componente
tipo DBGRID que permita establecer filtros de determinado campo mostrado
en la rejilla de datos haciendo click sobre el nombre de la columna. en otras
palabras lo que necesito es que al hacer click (primario o secundario) el nombre de la columna se convierta en un edit, por ejemplo, donde el usuario va
escribiendo y se va filtrando la informacion que contiene ese campo.

Gracias por sus atenciones

oscarac 19-07-2011 15:16:23

busca temas relacionados con busqueda incremental
eso te puede ayudar

ecfisa 21-07-2011 00:34:29

Hola cmfab.
Cita:

lo que necesito es que al hacer click (primario o secundario) el nombre de la columna se convierta en un edit, por ejemplo, donde el usuario va
escribiendo y se va filtrando la informacion que contiene ese campo.
Supongo que te referís al título de la columna. Te pongo un ejemplo que hace lo que buscas.
Código Delphi [-]
...
type
  TDBGrid = class(DBGrids.TDBGrid);
  TForm1 = class(TForm)
    IBDatabase1: TIBDatabase;
    IBTransaction1: TIBTransaction;
    DataSource1: TDataSource;
    IBQuery1: TIBQuery;
    DBGrid1: TDBGrid;
    Edit1: TEdit;
    procedure FormShow(Sender: TObject);
    procedure DBGrid1TitleClick(Column: TColumn);
    procedure Edit1Enter(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
  private
    FFieldName: string;
  public
  end;

var
  Form1: TForm1;

implementation  {$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
  Edit1.Visible:= False;
  Edit1.CharCase:= ecUpperCase;
end;

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
  R: TRect;
  CT: TColumnTitle;
begin
  FFieldName:= Column.Field.FieldName;
  CT:= TColumnTitle.Create(Column);
  try
    CT.Assign(Column.Title);
    R:= DBGrid1.CellRect(Column.Index+1,0);
    DBGrid1.Canvas.FillRect(R);
    with Edit1 do
    begin
      Left:= R.Left+1;
      Top:= R.Top+1;
      Width:= R.Right - R.Left +1;
      Height:=R.Bottom - R.Top +1;
      Visible:= True;
      SetFocus;
    end;
    Column.Title.Assign(CT);
  finally
    CT.Free;
  end;
end;

procedure TForm1.Edit1Enter(Sender: TObject);
begin
  TEdit(Sender).Text:= '';
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  if Edit1.Text <> '' then
   with IBQuery1 do
   begin
     Close;
     SQL.Clear;
     SQL.Add('SELECT * FROM TU_TABLA');
     SQL.Add('WHERE UPPER('+FFieldName+') LIKE'+QuotedStr(Edit1.Text+'%'));
     Open;
   end;
end;
end.

Saludos.

cmfab 23-07-2011 00:26:10

Hola gracias, disculpa por responder un poco tarde pero es que no estaba disponible. funciona bien solo tenderia que capturar el tipo de datos del campo para establecer el filtro adecuado.

gracias nuevamente

ecfisa 23-07-2011 01:08:59

Hola cmfab.

No sé con que componentes estás trabajando pero si te es posible hacerlo con una consulta SQL, te despreocupas del tipo de datos del campo. Siempre que te sea posible, claro está.

Saludos.


La franja horaria es GMT +2. Ahora son las 23:32:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi