Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-01-2011
verito_83mdq verito_83mdq is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 118
Poder: 14
verito_83mdq Va por buen camino
Evento con una fila en DBGrid

Holaa como andann?? La consulta es la siguiente tengo un TEdit al cual le ingreso el Apellido o nombre de la persona, por medio de una sentencia Sql like %% me muestra los apellido que se asemejen a la cadena que ingrese. La información me la muestra en un DBGrid conectado a un query. Cuando hago Clik en en DBGrig en la fila pintada esta me muestra información de si el cliente esta activo o rescindido. El problema es que si no hago Clik no me muestra esta información. Estuve buscando algún evento que sea cuando esta pintada la fila, pero no encontré . Sera posible esto?? Desde ya muchas gracias! Saludos!
Responder Con Cita
  #2  
Antiguo 21-01-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Tal vez no entiendo bien:
Dices 'Pintada', me imagino que es o cuando la recorres con las flechas o cuando la presionas con el raton.
Ten en cuenta que el dbgrid solo es un componente que muestra (un espejo) de lo que hay en el query.
Si recorres o quieres recorrer algo o lo haces en el dbgrid (visual) o lo haces en el dataset (tabla).
Cualquiera de los dos contiene el evento OnChange, se muestre o no, hara lo que necesitas.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 21-01-2011
verito_83mdq verito_83mdq is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 118
Poder: 14
verito_83mdq Va por buen camino
Hoola Caral!! Claro cuando dije pintada me refería a recorrerla con las flechas y al posicionarme me muestra la info que te comentaba antes. Ahora bien, el evento OnChange no esta en el Dbgrig, vos que que lo ponga en el datasource? Se entiende un poco mas ahora?
Gracias como siempre.
Responder Con Cita
  #4  
Antiguo 21-01-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Ponlo en el Query, ahi te va a funcionar muy bien.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #5  
Antiguo 21-01-2011
verito_83mdq verito_83mdq is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 118
Poder: 14
verito_83mdq Va por buen camino
Andaaa Vos tenes la bola de cristal!!! Recién lo hice y funciona lo puse en el onchange del query, ahora puedo usar las fechas y ver el estado del cliente. Lo que si tengo miedo de que esto le genere mucho trafico al motor de mysql hacer tantas consultas al mover las flechas, que opinas?
Muchas gracias Caral!!
Responder Con Cita
  #6  
Antiguo 21-01-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No lo creo.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #7  
Antiguo 21-01-2011
verito_83mdq verito_83mdq is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 118
Poder: 14
verito_83mdq Va por buen camino
Hola Caral!! Tengo otro problema! El drama es el siguiente, los ZQuery y los TDataSource los tengo en un data module fuera de la unidad Buscar, el problema es que cuando pongo el evento onchange como ayer mencionabas me abre el datamodule hasta ahi todo bien, cuando
quiero escribir el cogido por ejem si el cliente este rescindido que me ponga la fuente de color rojo de los botones en el form Buscar ,este no me toma el color y me tira error.

Código Delphi [-]
procedure TQueryDataModule.ClienteDataSourceStateChange(Sender: TObject); 
begin 
              BuscarForm.DatosConyugeBitBtn.Font.Color:=clred; 
 
end;

Me arma la sintaxis perfecta pero cuando le quiero asignar en color no me lo toma, sera que no se puede hacer esto en un datamodule? El problema que si tengo que poner el Zquery en el Form Buscar tengo que modificar bastante el codigo del programa, porque todas las variables de las consultas las saco del DataModule. Espero que me hallas entendido, si me podes dar una mano te lo voy a agradecer!!
Saludos!
Responder Con Cita
  #8  
Antiguo 21-01-2011
Avatar de Aleca
Aleca Aleca is offline
Miembro
 
Registrado: may 2003
Ubicación: Venado Tuerto, Argentina
Posts: 277
Poder: 22
Aleca Va por buen camino
Código Delphi [-]
procedure TFormOrd_Cpra.DBGrillaOCDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  nEst, nImg: Byte;
  gCanvas: TCanvas;
begin
  if Column.Index = 0 then
  begin
    nEst := TDBGrid(Sender).DataSource.DataSet.FieldByName(_Est_Ped).AsInteger;
    gCanvas := TDBGrid(Sender).Canvas;
    case nEst of
      _Ingreso: nImg := 0;
      _Termino: nImg := 1;
      _Impreso: nImg := 2;
    else
      nImg := 3;
    end;
    ImgEstados.Draw(gCanvas, Rect.Left + 2, Rect.Top + 1, nImg);
  end;
con esta opción pongo una imagen según el estado.
__________________
Aleca
Responder Con Cita
  #9  
Antiguo 21-01-2011
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 18
jafera Va por buen camino
Creo que debes tener un campo con el estado del cliente.
Usa este valor para crear un if que compare y que haga la funcion de cambiar el color de la fuente.

Ej.

If estado = cerrado
boton.fuente.color := rojo
sino
boton.fuente.color := negro

Saludos

Josep
Responder Con Cita
  #10  
Antiguo 21-01-2011
verito_83mdq verito_83mdq is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 118
Poder: 14
verito_83mdq Va por buen camino
Aleca como andas! Vos sabes que al principio había puesto el código en ese evento el drama es que tardaba mucho en cargar el grid con los datos, porque la búsqueda de clientes lo hago con un like entonces cuando en el buscador pongo la letra 'f' me aparecen 100 clientes y esto hace que se trabe el programa. Estaré haciendo algo mal?? Gracias!!!!
Responder Con Cita
  #11  
Antiguo 21-01-2011
verito_83mdq verito_83mdq is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 118
Poder: 14
verito_83mdq Va por buen camino
Jose eso mismo tengo pasa que no puse el código pero lo tengo con un If a todas las observaciones del cliente. Saludos y gracias!!!!!!!!!!!!!!!!!!!!!!!
Responder Con Cita
  #12  
Antiguo 21-01-2011
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 18
jafera Va por buen camino
Pues no se, yo tengo puesto en una de mis aplicaciones que si en un campo hay un valor X, entonces me ponga el fondo en color amarillo y la letra en rojo para que resalte y funciona perfectamente.

Igual si pones donde te lanza el error podemos ayudarte mejor.

En cuanto al like que dices que te traba, yo hago busquedas similares donde me devuelve mas de 100 registros y no se me bloquea.

Yo uso Firebird y IBX en Delphi 6

Saludos

Josep
Responder Con Cita
  #13  
Antiguo 21-01-2011
verito_83mdq verito_83mdq is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 118
Poder: 14
verito_83mdq Va por buen camino
Jafera ahi lo puse otra vez en el evento DrawColumnCel y ahora anda fluido, ayer lo probé varias veces y se trababa todo. Si llega a andar así me ahorraría un montón de código. Lo que me hace es que a veces no me actualiza los estados de los clientes por ahí si un cliente esta activo pero vengo de un rescindido el que esta activo me lo marca como rescindido y viceversa, no se si te pasara esto a vos? Sera problema del código mio?

Código Delphi [-]
procedure TBuscarForm.ClientesDBGridDrawColumnCell(Sender: TObject; 
  const Rect: TRect; DataCol: Integer; Column: TColumn; 
  State: TGridDrawState); 
begin 
 
 
 
       if (gdSelected in State) then 
          begin 
           TDBGrid(sender).Canvas.Brush.Color:=$00E8D3B5; 
           TDBGrid(sender).DefaultDrawColumnCell(Rect,DataCol,Column,State); 
          end; 
 
 
 
 
           if QueryDataModule.ClienteZQuery.FieldByName('Baja').Value=1 then 
                  begin 
 
                     if QueryDataModule.ClienteZQuery.FieldByName('Conyuge').IsNull then 
                         DatosConyugeBitBtn.Visible:=false 
                     else 
                       begin 
                         DatosConyugeBitBtn.Visible:=QueryDataModule.ClienteZQuery.FieldByName('Conyuge').Value; 
                         DatosConyugeBitBtn.Font.Color:=clred; 
                       end; 
 
 
 
                     if QueryDataModule.ClienteZQuery.FieldByName('Observaciones_Check').IsNull then 
                         ObservacionesBitBtn.Visible:=false 
                     else 
                       begin 
                         ObservacionesBitBtn.Visible:=QueryDataModule.ClienteZQuery.FieldByName('Observaciones_Check').Value; 
                         ObservacionesBitBtn.Font.Color:=clred; 
                        end; 
 
 
                         BorrarBitBtn.Font.Color:=clRed; 
                         DatosClienteBitBtn.Font.Color:=clred; 
                         DatosVentaBitBtn.Font.Color:=clred; 
                         EstadoBitBtn.Font.Color:=clred; 
                         ExportarBitBtn.Font.Color:=clred; 
                         ImprimirBitBtn.Font.Color:=clred; 
                         UltimaModificacionBitBtn.Font.Color:=clred; 
                         PagosBitBtn.Font.Color:=clred; 
                         ContracargosBitBtn.Font.Color:=clred; 
                         TarjetasBitBtn.Font.Color:=clred; 
                         RescindirBitBtn.Font.Color:=clred; 
                         BitBtn1.Font.Color:=clred; 
                         BitBtn2.Font.Color:=clred; 
 
                  end 
 
                else 
 
                 begin 
                    // Si el cliente esta activo, pone botones en verde 
 
 
                    if QueryDataModule.ClienteZQuery.FieldByName('Conyuge').IsNull then 
                         DatosConyugeBitBtn.Visible:=false 
                    else 
                      begin 
                         DatosConyugeBitBtn.Visible:=QueryDataModule.ClienteZQuery.FieldByName('Conyuge').Value; 
                         DatosConyugeBitBtn.Font.Color:=clGreen; 
                      end; 
 
 
 
 
 
 
                      if QueryDataModule.ClienteZQuery.FieldByName('Observaciones_Check').IsNull then 
                         ObservacionesBitBtn.Visible:=false 
                     else 
                       begin 
                         ObservacionesBitBtn.Visible:=QueryDataModule.ClienteZQuery.FieldByName('Observaciones_Check').Value; 
                         ObservacionesBitBtn.Font.Color:=clGreen; 
                        end; 
 
 
 
                         DatosClienteBitBtn.Font.Color:=clGreen;; 
                         DatosVentaBitBtn.Font.Color:=clGreen; 
                         BorrarBitBtn.Font.Color:=clGreen; 
                         EstadoBitBtn.Font.Color:=clGreen; 
                         ExportarBitBtn.Font.Color:=clGreen; 
                         ImprimirBitBtn.Font.Color:=clGreen; 
                         UltimaModificacionBitBtn.Font.Color:=clGreen; 
                         PagosBitBtn.Font.Color:=clGreen; 
                         ContracargosBitBtn.Font.Color:=clGreen; 
                         TarjetasBitBtn.Font.Color:=clGreen; 
                         RescindirBitBtn.Font.Color:=clGreen; 
                         BitBtn1.Font.Color:=clGreen; 
                         BitBtn2.Font.Color:=clGreen; 
                  end; 
 
 
 
 
 
 
 
                         DatosClienteBitBtn.Visible:=True; 
                         DatosVentaBitBtn.Visible:=True; 
                         BorrarBitBtn.Visible:=True; 
                         EstadoBitBtn.Visible:=True; 
                         ExportarBitBtn.Visible:=True; 
                         ImprimirBitBtn.Visible:=True; 
                         UltimaModificacionBitBtn.Visible:=True; 
                         PagosBitBtn.Visible:=True; 
                         ContracargosBitBtn.Visible:=True; 
                         TarjetasBitBtn.Visible:=True; 
                         RescindirBitBtn.Visible:=True; 
                         BitBtn1.Visible:=True; 
                         BitBtn2.Visible:=True; 
 
 
 
 
end;



Ahi esta el procedimiento entero, Desde ya gracias por la ayuda a todos no solo a jafera, son todos muy amables.
Responder Con Cita
  #14  
Antiguo 21-01-2011
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 18
jafera Va por buen camino
El campo observaciones_check que valores toma?

Pones algo de valor null, yo le asignaria siempre un valor 0-1, S-N y no trabajaria con null porque null no es nada.

Cuando tengo un campo chek yo por defecto le asigno siempre valor en el newrecord, esto me ahorra muchos problemas.

Tambien podrias dejar los botones siempre visibles pero ponerle enabled a false, no se lo digo sin ver el resultado que quieres conseguir con tu interface.

Hasta pronto

Josep
Responder Con Cita
  #15  
Antiguo 22-01-2011
Avatar de Aleca
Aleca Aleca is offline
Miembro
 
Registrado: may 2003
Ubicación: Venado Tuerto, Argentina
Posts: 277
Poder: 22
Aleca Va por buen camino
fijate este codigo (no lo pude probar)
Código Delphi [-]
procedure TBuscarForm.ClientesDBGridDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
var
  cColor: TColor;
begin
  if State = [] then
    TDBGrid(sender).Canvas.Brush.Color := clWhite
  else
  begin
    TDBGrid(sender).Canvas.Brush.Color := $00E8D3B5;
    //Veo que esto lo haces x cada celda cuando no te cambia la info, lo haria para la primer celda nada más.
    if Column.Index = 0 then
    begin
      with QueryDataModule.ClienteZQuery do
      begin
        //por lo que vi la visibilidad depende del valor del campo y no si esta activo o no.
        if FieldByName('Conyuge').IsNull then //Aca coincido con jafera
          DatosConyugeBitBtn.Visible := false
        else
          DatosConyugeBitBtn.Visible := FieldByName('Conyuge').Value;

        if FieldByName('Observaciones_Check').IsNull then
          ObservacionesBitBtn.Visible:=false
        else
          ObservacionesBitBtn.Visible := FieldByName('Observaciones_Check').Value;

        if FieldByName('Baja').Value = 1 then
          cColor := clRed
        else
          // Si el cliente esta activo, pone botones en verde
          cColor := clGreen;

        DatosConyugeBitBtn.Font.Color := cColor;
        ObservacionesBitBtn.Font.Color := cColor;
        BorrarBitBtn.Font.Color := cColor;
        DatosClienteBitBtn.Font.Color := cColor;
        DatosVentaBitBtn.Font.Color := cColor;
        EstadoBitBtn.Font.Color := cColor;
        ExportarBitBtn.Font.Color := cColor;
        ImprimirBitBtn.Font.Color := cColor;
        UltimaModificacionBitBtn.Font.Color := cColor;
        PagosBitBtn.Font.Color := cColor;
        ContracargosBitBtn.Font.Color := cColor;
        TarjetasBitBtn.Font.Color := cColor;
        RescindirBitBtn.Font.Color := cColor;
        BitBtn1.Font.Color := cColor;
        BitBtn2.Font.Color := cColor;

        //Estos true no harian falta x que no veo que los pongas en falso
        DatosClienteBitBtn.Visible:=True;
        DatosVentaBitBtn.Visible:=True;
        BorrarBitBtn.Visible:=True;
        EstadoBitBtn.Visible:=True;
        ExportarBitBtn.Visible:=True;
        ImprimirBitBtn.Visible:=True;
        UltimaModificacionBitBtn.Visible:=True;
        PagosBitBtn.Visible:=True;
        ContracargosBitBtn.Visible:=True;
        TarjetasBitBtn.Visible:=True;
        RescindirBitBtn.Visible:=True;
        BitBtn1.Visible:=True;
        BitBtn2.Visible:=True;
        //se podria sacar.
      end;
    end;
  end;
  TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
__________________
Aleca

Última edición por Aleca fecha: 22-01-2011 a las 13:01:38.
Responder Con Cita
  #16  
Antiguo 22-01-2011
verito_83mdq verito_83mdq is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 118
Poder: 14
verito_83mdq Va por buen camino
Aleca como andas?? Hace poco que estoy en esta comunidad y ya les tome aprecio, espero que con el tiempo yo también pueda dar una mano como hacen ustedes, recién estoy empezando en esto. Vos sabes que con el código que me pasaste pude arreglar el problema, le modifique algunas cosas que mencionaron ustedes salvo la ultima parte de los botones que los pongo en Visible:=True, eso es porque en el form create los oculto, y si no aparece el cliente también los oculto, es por eso.

Bueno a todos los que me ayudaron Aleca, Jafera,Caral, les digo gracias! Seguiré trabajando en en el programa, nunca les conté pero este trabajo es para un final de la facultad, no es para venderlo!
Saludos!
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
DBGRID ¿como seleccionar fila y obtener datos de la fila ? JXJ Varios 5 18-04-2017 02:50:14
saber que fila del dbgrid gesjug Varios 5 02-07-2008 16:02:00
tomar una fila de un DBGrid y traspasarlo a otro DBGrid micky mouse Varios 2 05-06-2008 16:24:18
Fila DBGRID hcalero Varios 4 09-05-2007 13:29:12
Fila del DbGrid Rabata Varios 3 08-11-2004 22:18:13


La franja horaria es GMT +2. Ahora son las 09:00:59.


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