Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-06-2018
DiegoPucho DiegoPucho is offline
Miembro
NULL
 
Registrado: ago 2017
Posts: 36
Poder: 0
DiegoPucho Va por buen camino
Guardar Datos en un CheckListBox y dbgrid

Para continuar con mis preguntontas: ´Guardar Datos en un CheckListBox y dbgrid´. El problema es en el código.
Paso a detallar mi problema: Luego de investigar logre hacer lo siguiente: 1° Visualizar mi CheckListBox y dbgrid de la siguiente manera:
Código Delphi [-]
procedure TFrmModArt.FormCreate(Sender: TObject);
 var
  i: Integer;
 begin
  for i:= 0 to DBGridProductos.Columns.Count-1 do
  begin
    DBGridProductos.Columns[i].Visible:= true; // mostrar columna.
    CheckListBox1.Items.Add(DBGridProductos.Columns[i].Title.Caption);  // copiar título al combo
    CheckListBox1.Checked[i]:= true; // pone a todos en Checked.
  end;
Código Delphi [-]
procedure TFrmModArt.CheckListBox1ClickCheck(Sender: TObject);
begin
 with TCheckListBox(Sender) do
  begin
  DBGridProductos.Columns[ItemIndex].Visible:= not DBGridProductos.Columns[ItemIndex].Visible;
  end;
end;
Con esto se ve genial... Ya que los CheckListBox1.Checked quedan todos seleccionados y me los muestra en el dbgrid.
2° ahora se me ocurrió agregarle que guardara tanto los datos del CheckListBox y como el formato del dbgrid. de esta manera:
Código Delphi [-]
procedure TFrmModArt.BtGuarConfigClick(Sender: TObject);
begin
 DBGridProductos.Columns.SaveToFile('C:\1TProColum.cln');
 CheckListBox1.Items.SaveToFile('C:\1TProItems.cln');
 showmessage('Configuración Guardada con Exito!');
end;
3° He aquí la complicación..!! Lo muestro de la siguiente manera:
Código Delphi [-]
procedure TFrmModArt.FormCreate(Sender: TObject);
 var
  i: Integer;
 begin
  if FileExists('C:\1TProColum.cln') then
  begin
  DBGridProductos.Columns.LoadFromFile('C:\1TProColum.cln');
  CheckListBox1.Items.LoadFromFile('C:\1TProItems.cln');
  end
  else
  begin
  for i:= 0 to DBGridProductos.Columns.Count-1 do
  begin
    DBGridProductos.Columns[i].Visible:= true; // mostrar columna.
    CheckListBox1.Items.Add(DBGridProductos.Columns[i].Title.Caption);  // copiar título al combo
    CheckListBox1.Checked[i]:= true; // pone a todos en Checked.
  end;
  end;
end;
Aquí la PREGUNTONTA!!! Como hago para que me muestre lo que guarde, osea me lo muestra, pero no como yo quiero, me de selecciona todos los Checked de mi CheckListBox y quiero que me muestre como yo lo guarde, solo los Checked que guardé... Algo le falta al código que no se como hacerlo... Alguna idea??? Desde ya gracias son los mejores... Espero muy pronto poder aportar mis aprendizajes...
Responder Con Cita
  #2  
Antiguo 14-06-2018
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Porque la línea:
Código Delphi [-]
  CheckListBox1.Items.SaveToFile('c:\1TProItems.cln');


Sólo guarda los elementos, no su estado (checked o no).
Quien sí guarda esa información es el DBGrid junto a las columnas con esta línea:


Código Delphi [-]
    DBGridProductos.Columns.SaveToFile('c:\1TProColum.cln');


Entonces como ya tienes esa información en las columnas, sólo tienes que pasarla al componente de CheckListBox.
Añade esto en el FormCreate:


Código Delphi [-]
    ...
   CheckListBox1.Items.LoadFromFile('C:\1TProItems.cln');
    for i:= 0 to DBGridProductos.Columns.Count-1 do  begin
      CheckListBox1.Checked[i]:= DBGridProductos.Columns[i].Visible;
    end;
   ....
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 14-06-2018
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.

Otra opción para el TCheckListBox que requiere escribir un poquito más, pero te permite reutilizar los nuevos métodos añadidos cuando lo precises:
Código Delphi [-]
unit CheckListBoxEx;

interface

uses SysUtils, Classes, CheckLst;

type
  TCheckListBox = class(CheckLst.TCheckListBox)
  public
    procedure SaveToFile(const FileName: string);
    procedure LoadFromFile(const FileName: string);
  end;

implementation

procedure TCheckListBox.SaveToFile(const FileName: string);
var
  i: Integer;
  TS: TStrings;
begin
  TS := TStringList.Create;
  try
    for i := 0 to Self.Items.Count-1 do
      if Self.Checked[i] then
        TS.Add('*' + Self.Items[i])
      else
        TS.Add(' ' + Self.Items[i]);
    TS.SaveToFile(FileName);
  finally
    TS.Free;
  end;
end;

procedure TCheckListBox.LoadFromFile(const FileName: string);
var
  i: Integer;
  TS: TStrings;
begin
  if not FileExists(FileName) then
    raise Exception.Create('Archivo no encontrado');
  Self.Items.Clear;
  TS := TStringList.Create;
  try
    TS.LoadFromFile(FileName);
    for i := 0 to TS.Count-1 do
    begin
      Self.Items.Add(Copy(TS[i], 2, MaxInt));
      Self.Checked[i] := TS[i][1] = '*';
    end;
  finally
    TS.Free;
  end;
end;
end.

Ejemplo de uso:
Código Delphi [-]
unit Unit1;

interface

uses  ..., { siempre añadir última -> } CheckListBoxEx;

type
  TForm1 = class(TForm)
    CheckListBox1: TCheckListBox;
    btnSave: TButton;
    btnLoad: TButton;
    procedure btnSaveClick(Sender: TObject);
    procedure btnLoadClick(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation 

const  FNAME = 'Items.cln';

procedure TForm1.btnSaveClick(Sender: TObject);
begin
  CheckListBox1.SaveToFile(FNAME);
end;

procedure TForm1.btnLoadClick(Sender: TObject);
begin
  CheckListBox1.LoadFromFile(FNAME);
end;
...

Muestra:


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 15-06-2018
DiegoPucho DiegoPucho is offline
Miembro
NULL
 
Registrado: ago 2017
Posts: 36
Poder: 0
DiegoPucho Va por buen camino
Muchas Gracias ecfisa y Neftali muy buena la explicación...
Se podría guardar todo en un solo archivo?? Digo datos del DbGrid y datos del CheckListBox???
Responder Con Cita
  #5  
Antiguo 15-06-2018
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por DiegoPucho Ver Mensaje
Se podría guardar todo en un solo archivo?? Digo datos del DbGrid y datos del CheckListBox???

Si utilizas los métodos que ya hay no, ya que son componentes diferentes y cada cual guarda su información y en su formato.
Pero siempre puedes extender lo que hay, de la forma que ha explicado ecfisa, y programar tú lo que necesites con el formato que quieras.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Guardar y Leer fotos directamente a una base de datos sin antes guardar como archivo rmeckbell Desarrollo en Delphi para Android 6 26-06-2017 19:24:20
Como guardar datos de un dbgrid en un fichero walter86 Varios 7 23-08-2016 19:08:43
Guardar datos desde un dbgrid estopi Conexión con bases de datos 9 12-01-2015 00:54:41
guardar datos de un DBGrid a dos tablas jeysi Varios 5 01-01-2008 02:25:24


La franja horaria es GMT +2. Ahora son las 15:06:23.


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