Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Crear un CheckBox dentro de un DBGrid

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Crear un CheckBox dentro de un DBGrid Responder citando

Hola:

El caso es que necesito realizar una consulta a una base de datos y mostrarlo en un objeto al estilo de los DBGrid, aunque no es necesario que sea este, y que la celda que contenga el valor boolean aparezca un checkbox en lugar de un soso True / False.

Llevo ya un tiempo intentando crear un CheckBox dentro de un DBGrid, pero no he encontrado nada que me pueda dar una pista. E intentado simular este comportamiento con un DBCtrlGrid pero queda muy feo y además el CheckBox no es editable.

¿Alguién me podría dar una idea de como solucionar este problema?

Gracias
Volver arriba
Mensaje    Asunto: Responder citando

Hola.

Sigue los enlaces que tienes en este post
https://cppbuilder.es/viewtopic.php?t=9433

y ya me comentaras.
_________________
Un saludo
Rayder
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Otra alternativa que tienes es emplear un TListView (pestaña Win32), que te permite incluir una casilla de selección para cada ítem de la misma. Con este código cargas el elemento, por ejemplo con TButton:
Código:
void __fastcall TfSocios::Button1Click(TObject *Sender)
{
     TListColumn *pColumn;
     TListItem *pItem;

// Defino las columnas que voy a usar

     ListView1->Columns->Clear();
     pColumn = ListView1->Columns->Add();
     pColumn->Caption = "Apellidos, Nombre";
     pColumn = ListView1->Columns->Add();
     pColumn->Caption = "Fecha";

// Cargo la tabla desde el fichero

     while (!Table1->Eof)
     {
          pItem = ListView1->Items->Add();
          pItem->Caption = Table1->FieldByName("Apellido")->AsString + ", " + Table1->FieldByName("Nombre")->AsString;
          pItem->SubItems->Add(Table1->FieldByName("Fecha")->Value.FormatString("dd/mm/yyyy"));
          Table1->Next();
     }
}

Con esto cargarías la tabla con los datos. Para que salga la casilla de verificación en cada elemento, en las propiedades del TListView tienes que poner la propiedad ViewStyle como vsReport y la propiedad CheckBoxes a true.

Para evaluar los elementos puedes usar un bucle for:
Código:
for (int nItem = 0; nItem < ListView1->Items->Count; nItem ++)
     if (ListView1->Items->Item[nItem]->Checked)
     {
          (Código a jecutar si está marcada la casilla)
     }

_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Saludos... yo lo he hecho, pero en Delphi, aqui te pongo el codigo, no creo que te cueste mucho convertirlo, lo haria pero ahorita no tengo mucho tiempo; de todos modos si tienes problemas con la conversion, mas tarde con mas calma te puedo auxiliar...

En el evento OnDrawColumnCell poner lo siguiente
Código:

procedure TfrmDamnificados.GridDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
Const CtrlState : array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
var
      CheckBoxRectangle : TRect;
begin

  If Column.Field.DataType = ftBoolean then
  begin
     (Sender as TDBGrid).Canvas.FillRect(Rect);
     CheckBoxRectangle.Left := Rect.Left + 2;
     CheckBoxRectangle.Right := Rect.Right - 2;
     CheckBoxRectangle.Top := Rect.Top + 2;
     CheckBoxRectangle.Bottom := Rect.Bottom - 2;
     DrawFrameControl((Sender as TDBGrid).Canvas.Handle, CheckBoxRectangle,
                      DFC_BUTTON, CtrlState[Column.Field.AsBoolean]);
  end;
end;


y en el evento OnCellClick
Código:

procedure TfrmDamnificados.GridCellClick(Column: TColumn);
begin
   with Column.Field.DataSet do
    begin
       if ((Column.Field.DataType = ftBoolean) and (not Column.Field.AsBoolean)) then
         begin
           Edit();
           FieldByName(Column.FieldName).AsBoolean:=not FieldByName(Column.FieldName).AsBoolean;
           Post();
           QuitarPalomita(FieldByName('IdPersona').AsInteger);
         end;
    end;
end;


y listo, ahi te debe de funcionar... saludos....
_________________
Dirección Municipal de Informática
H. Ayuntamiento de Tijuana
Arriba Lopez Obrador !!!
Los Mexicanos Merecemos Respeto !!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Mira este enlace

https://cppbuilder.es/viewtopic.php?t=8738&highlight=
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Gracias Responder citando

Muchas gracias a todos. Asi da gusto escribir a un foro. Ahora voy a echarles un vistazo a cada una de las opciones y ya les cuento.
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.