Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-11-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
[Truco] TDBGrid(Columna, Fila)

Hola.

He visto que varios han preguntado por la posibilidad de posicionarse en determinadas columnas y filas de un TDBGrid e hice un código
con algunos trucos 'sucios' para lograrlo.

No lo ví en la sección trucos así que decidí ponerlo aquí por si le sirve a alguien:
Código Delphi [-]
type
  TDBGridExt = Class(TDBGrid);
  TForm1 = class(TForm)
    ...
    DBGrid1: TDBGrid;
    ...
  private
    function DBgridColFil(ACol,AFil: integer; GE: TDBGridExt): string;
  public
  end;
...
implementation
...
function TForm1.DBgridColFil(ACol, AFil: integer; GE: TDBGridExt): string;
begin
  Result:= '';
  GE.DataSource.DataSet.MoveBy(1 - GE.Row); //  DataSet en fila 1 del DBGrid
  // Verifocar validez de ACol y AFil
  if (AFil > 0)and(ACol > 0)and(AFil < GE.RowCount)and(ACol < GE.ColCount) then
  begin
    GE.DataSource.DataSet.MoveBy(Afil-1); // Posicionarse en  AFil
    GE.Refresh;
    GE.FocusCell(ACol,AFil,True);         // Foco en la celda
    GE.SetFocus;
    Result:= GE.SelectedField.AsString;
  end
  else
    raise Exception.Create('Selección fuera de rango');
end;

Ejeplo de uso:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Caption:= DBGridColFil(2, 3, TDBGridExt(DBGrid1));
end;

Si Algún moderador cree que vale la pena, subo el código con un ejemplo funcional donde me indiquen.

Un saludo.
Responder Con Cita
  #2  
Antiguo 26-11-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.106
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ecfisa Ver Mensaje
Si Algún moderador cree que vale la pena, subo el código con un ejemplo funcional donde me indiquen.
Un saludo.
Vale la pena, pero creo que la sección de "trucos" está en sólo lectura mientras resolvemos unos problemillas en ella.
Responder Con Cita
  #3  
Antiguo 26-11-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Muy buen truco amigo ecfisa.
Yo tambien quiero agregar mi propia version del truco:
Para Posicionarme en una determinada fila y columna se puede hacerlo así:
Código Delphi [-]
TStringGrid(DBGrid1).Col:=2;
TStringGrid(DBGrid1).Row:=5;
DBGrid1.SetFocus;
Pero mejor hacer un método que me haga todo, idéntico al tuyo:
Código Delphi [-]
function TForm1.DBgridColFil(ACol, AFil: integer; Rejilla: TDBGrid): string;
begin
Result:='';
 if (ACol < 1)  or (ACol > TStringGrid(Rejilla).ColCount) or (AFil<1) or (AFil > TStringGrid(Rejilla).RowCount) then
    raise Exception.Create('Selección fuera de rango');
TStringGrid(Rejilla).Row:=AFil;
TStringGrid(Rejilla).Col:=ACol;
Rejilla.SetFocus;
Result:=Rejilla.SelectedField.AsString;//<---Linea agregada que me olvidé 
end;
Elemplo de uso:
Código Delphi [-]
 DBgridColFil(2,5,DBGrid1);
En otras palabras se puede hacer un casting a nuestro DBGrid convirtiendolo en un StringGrid normal y trabajarlo como tal.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 26-11-2010 a las 23:33:08.
Responder Con Cita
  #4  
Antiguo 26-11-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.106
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por rgstuamigo Ver Mensaje
[..] En otras palabras se puede hacer un casting a nuestro DBGrid convirtiendolo en un StringGrid normal y trabajarlo como tal.
¿No puede ser "peligroso" hacer eso?, uno es de BD y el otro no, no sé, no me inspira mucha confianza, pero si lo has probado y va bien, pues estupendo.
Responder Con Cita
  #5  
Antiguo 26-11-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿No puede ser "peligroso" hacer eso?
Bueno..., hay que tener el cuidado respectivo y probar hasta dónde puedes llegar, en éste caso tanto el StringGrid como el DBGrid tienen como ancestro(Padre) comun mas cercano a la clase TCustomGrid y por eso es permitido hacer dicho casting y accesar a tales propiedades.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 26-11-2010 a las 23:15:46.
Responder Con Cita
  #6  
Antiguo 26-11-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.106
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Sí, bueno, por supuesto que se puede hacer, pero siempre me ha producido cierto "reparo" hacer estas cosas, aunque también las hago cuando hace falta, claro.


Edito: era respondiendo a rgstuamigo

Última edición por Casimiro Notevi fecha: 26-11-2010 a las 23:32:19.
Responder Con Cita
  #7  
Antiguo 26-11-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola rgstuamigo.

Está muy bien pensado, posiciona perfectamente.

Yo lo busque por el lado del TCustomDBGrid por que me permite posicionar y tambien obtener el campo de dicha posición.
Por ejemplo:
Código Delphi [-]
function TForm1.DBGridColFil(ACol, AFil: integer; GE: TDBGridExt): TField;
begin
  Result:= nil;
  GE.DataSource.DataSet.MoveBy(1 - GE.Row);
  if (AFil > 0)and(ACol > 0)and(AFil < GE.RowCount)and(ACol < GE.ColCount) then
  begin
    GE.DataSource.DataSet.MoveBy(Afil-1);
    GE.Refresh;
    GE.FocusCell(ACol,AFil,True);
    GE.SetFocus;
    Result:= GE.SelectedField;
  end
  else
    raise Exception.Create('Selección fuera de rango');
end;

...
begin
   Caption:= DBGridColFil(4, 3,TDBGridExt(DBGrid1)).AsString;
  ...

No sé si se puede obtener el campo trabajándolo como TStringGrid... , pero será cosa de buscarle la vuelta...

Saludos.
Responder Con Cita
  #8  
Antiguo 26-11-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por ecfisa Ver Mensaje
...No sé si se puede obtener el campo trabajándolo como TStringGrid... , pero será cosa de buscarle la vuelta...
...
A Caray se me olvidó esa linea de agregarle a la funcion que hize, pero ya lo he agregado.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #9  
Antiguo 26-11-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por rgstuamigo Ver Mensaje
A Caray se me olvidó esa linea de agregarle a la funcion que hize, pero ya lo he agregado.
Saludos...
Acabo de probarlo y funciona correctamente.
Mejor entonces, ahora tienen dos trucos para elegir.
Y como en esto siempre hay más de una forma correcta de hacer algo, en cualquier momento se suma un tercero o cuarto...


Un saludo.

Última edición por ecfisa fecha: 26-11-2010 a las 23:48:45.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Fila del TDBGrid Val Conexión con bases de datos 3 20-06-2007 13:45:03
Dibujar encabezado Columna TDBGrid eureka OOP 3 21-11-2005 03:02:44
Nro de fila en TDBGrid lucasarts_18 Varios 16 11-06-2005 16:26:17
Como Ordenar Un Tdbgrid Con Clic En Columna cmena Varios 4 03-05-2004 16:52:34
Como Fijar Una Columna De Un Tdbgrid cmena Varios 0 22-04-2004 18:41:37


La franja horaria es GMT +2. Ahora son las 08:54:00.


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