Diferencia entre revisiones de «TTfvsDBClientFrameCheckList»

De Pragma Wiki
Ir a la navegación Ir a la búsqueda
Sin resumen de edición
Línea 1: Línea 1:
=Descripción=
=Descripción=
El frame '''TTfvsDBClientFrameCheckList''' (Implementa lista para checkboxes) implementa un frame donde podemos editar una lista de líneas, cada una con un checkbox. Toma una clase definida y la transforma a una lista de checkboxes. Necesita tener el frame de edición definido como se muestra en el ejemplo.
El frame '''TTfvsDBClientFrameCheckList''' (Implementa lista para checkboxes) implementa un frame donde podemos editar una lista de líneas, cada una con un checkbox. Toma una clase definida y la transforma a una lista de checkboxes.  
 
Necesita tener el frame de edición definido como se muestra en el ejemplo.


=[[QUEESESTO/IDENTIDAD|Identidad]]=
=[[QUEESESTO/IDENTIDAD|Identidad]]=

Revisión del 17:39 3 jun 2025

Descripción

El frame TTfvsDBClientFrameCheckList (Implementa lista para checkboxes) implementa un frame donde podemos editar una lista de líneas, cada una con un checkbox. Toma una clase definida y la transforma a una lista de checkboxes.

Necesita tener el frame de edición definido como se muestra en el ejemplo.

Identidad

  • Ancestro: TTfvsDBClientFrame
  • Carpeta: C:\DevelopPrx\frames
  • Archivo: fvsDBClientFrameCheckList.pas

Ejemplo de definición

Vista de la pantalla en runtime

Usamos el detalle de CONTABILIDAD/GRUPOS DE CUENTAS como ejemplo, la pantalla se ve de la siguiente manera:

Grupos de cuentas contables.

El detalle usa este frame, la definición de la clase es:

Lista de campos

Columna Campo físico Campo lógico Observaciones
1 FGRUPO Grupo Código de agrupación.
2 FCUENTA Cuenta Código de cuenta asociada a la agrupación.

La lista de checks va a aplicar sobre el último campo que sea clave, en este caso el de atributo CUENTA.

Definición del frame

Solo necesita Instancia 1:

Definición del frame.

Con estas definiciones el frame transforma la tabla en una lista de checkboxes, marca las que estaban marcadas y finalmente, a pedido del master, arma los registros que hay que aplicar para que la tabla solo contenga los registros que están marcados en la pantalla.

Declaración

type
  TTfvsDBClientFrameCheckList = class(TTfvsDBClientFrame)
    Panel1: TPanel;
    Panel3: TPanel;
    PanelNAVEGADOR: TPanel;
    DBNavigator1: TfvsDBNavigator;
    Panel2: TPanel;
    SpeedButton_OPCIONES: TfvsBotonOpciones;
    prxListaCHECKS: TprxListView;
    procedure DBNavigator1NavigatorClick(Sender: TDBNavigator; aButton: TNavigateBtn; aX, aY: Integer; var aHandled: Boolean);
  private
    FADOField: Tfva_campos_item;

    FCheckedOffImage: Integer;

    FCargarComandosCount: Integer;
    FRefreshing: Boolean;
  protected
    procedure   FieldMessage(var Message: TprxADODataSetMessage); message MSG_PRXADODATASETMESSAGE;
    procedure   CargarComandos;
    procedure   GuardarCambios(Sender: TObject);
    procedure   CancelarCambios(Sender: TObject; var aCloseForm: Boolean);

    property    ADOField: Tfva_campos_item read FADOField write FADOField;
    property    CheckedOffImage: Integer read FCheckedOffImage write FCheckedOffImage;
    property    CargarComandosCount: Integer read FCargarComandosCount write FCargarComandosCount;
    property    Refreshing: Boolean read FRefreshing write FRefreshing;
  public
    procedure   OnFrameShow(Sender: TObject); override;

    procedure   ClassShow_BuildFrame(Sender: TObject); override;
    function    ClassShow_AgregarTablaMaster(aTabla: String): Boolean; override;
    function    ClassShow_AgregarControles: Boolean; override;
    function    ClassShow_Activate(aActivateDataSet: Boolean): Boolean; override;

    procedure   ClassShow_Activate_GetFilterCommands(aDataSet: TprxADODataSetEdit); override;
  end;

Implementación

procedure CargarComandos

Carga los comandos para refrescar el contenido del frame, asume que el dataset tiene sus propios datos refrescados.

Primero carga la lista de registros del atributo, en el ejemplo ejecuta:

SELECT * FROM CUENTA

Después carga los registros de la tabla, en este caso CUENTA_GRUPOD, y marca con tilde los que existan.

procedure GuardarCambios(Sender: TObject)

Guarda los registros correspondientes a los ítems marcados, el procedimiento es:

  • Elimina todos los registros de la tabla, con esto se simplifica mucho el grabado.
  • Arma registros de inserción para cada elemento marcado.

Solo en el caso de que esta tabla sea el master aplica la transacción, sinó lo hará a través del master.

if DataSet.IsTransactionMaster then
   begin
   DataSet.UpdateBatchXtd;
   end;

procedure CancelarCambios(Sender: TObject; var aCloseForm: Boolean)

Cancela los cambios pendientes.

procedure DBNavigator1NavigatorClick(Sender: TDBNavigator; aButton: TNavigateBtn; aX, aY: Integer; var aHandled: Boolean)

Procesa los eventos del navegador.

  if aButton = nbRefresh then
     begin
     CargarComandosCount := 0;
     CargarComandos;
     end
  else
  if aButton = nbEdit then
     begin
     prxListaCHECKS.CanCheck := True;
     prxListaCHECKS.SetFocus;
     end
  else
  if aButton = nbPost then
     begin
     GuardarCambios(Self);

     prxListaCHECKS.CanCheck := False;
     end
  else
  if aButton = nbCancel then
     begin
     CargarComandos;
     CargarComandosCount := 0;

     prxListaCHECKS.CanCheck := False;
     end;
  • Si debe refrescar vuelve a cargar los comandos.
  • Si debe editar setea el foco en el control de edición con los checks.
  • Si debe postear guarda los cambios.
  • Si debe cancelar vuelve a cargar los comandos.

function ClassShow_AgregarControles: Boolean

Arma la lista de checks.

Uso

Este frame se usa según las condiciones explicadas en el ejemplo al inicio de este artículo.