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 

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: CheckBox dentro de un DBgrid Responder citando

Hola amigos, ante todo un saludo, verán, quiero poner un componente del tipo CheckBox dentro de un DBGrid, de tal manera que el CheckBox este ligado a un campo de la base de datos, si marcamos el CheckBox el campo toma el valor True, y si no está marcado el valor False.

Vamos así o algo similar,

Gracias de antemano.
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

Se que me vais a remitir al foro para que busque, pero veran soy un novato de los buenos y no termino de hacer funcionar los ejemplos que he encontrado.
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

Hola Martin

Publica los ejemplos que has puesto a funcionar y cuentanos en qué han fallado para poderte ayudar.

Saludos!
_________________
Dios es real... a menos que se declare entero!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hasta donde yo he usado en un DBGrid creo que no se pueden poner CheckBox. Cuando me hace falta eso utilizo un ListView de la paleta Win32, que sí trae esa propiedad. Por ejemplo para dos columnas:
Código:
TListColumn *pColumn;
TListItem *pItem;

ListView1->Columns->Clear();
ListView1->Items->Clear();
ListView1->Checkboxes = true;
ListView1->ViewStyle = vsReport;

pColumn = ListView1->Columns->Add();
pColumn->Caption = "Campo 1";
pColumn->Width = 125;
pColumn = ListView1->Columns->Add();
pColumn->Caption = "Campo 2";
pColumn->Width = 125;

MiTabla->First();
while (!MiTabla-Eof)
{
     pItem = ListView1->Items->Add();
     pItem->Caption = MiTabla->FieldByName("Campo1")->Value;
     pItem->SubItems->Add(MiTabla->FieldByName("Campo2")->Value);
     MiTabla->Next();
}

Así insertarías los valores en el ListView. Luego con los eventos OnClick y OnSelect puedes ir controlando lo que te interese.
_________________
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

Angel, te digo que SI es posible insertar no solo CheckBox dentro de un DBGrid, puedes insertar casi cualquier control dentro de un DBGrid y a continuación les pongo un poco de código cómo se logra...

Código:

//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
   DBCheckBox1 -> DataSource = DataSource1;
   DBCheckBox1 -> DataField  = "NombreDelCampoBool";
   DBCheckBox1 -> Visible    = false;
   DBCheckBox1 -> Color      = DBGrid1 -> Color;
   DBCheckBox1 -> Caption    = "";

   //Dependiendo del cada manejador de BD cambia el valor
   //que regresa el campo, en mi caso uso MySQL y los valores son
   // los siguientes, pero puede ser true y false o cualquier otro valor.
   DBCheckBox1 -> ValueChecked   = "1";
   DBCheckBox1 -> ValueUnchecked = "0";

   ADOQuery1 -> Open();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender,
      const TRect &Rect, int DataCol, TColumn *Column,
      TGridDrawState State)
{
   int  DrawState;
   RECT DrawRect;

   if(State.Contains(gdFocused))
   {
      if(Column -> Field -> FieldName == DBCheckBox1 -> DataField)
      {
         DBCheckBox1 -> Left   = Rect.Left + DBGrid1 -> Left + 2;
         DBCheckBox1 -> Top    = Rect.Top  + DBGrid1 -> Top  + 2;
         DBCheckBox1 -> Width  = Rect.Right - Rect.Left;
         DBCheckBox1 -> Height = Rect.Bottom - Rect.Top;

         if(DBCheckBox1 -> Checked)
            DBCheckBox1 -> Caption = "Verdadero";
         else
            DBCheckBox1 -> Caption = "Falso";

         DBCheckBox1 -> Visible = true;
      }
   }
   else
   {
      if(Column -> Field -> FieldName == DBCheckBox1 -> DataField)
      {
         DrawRect.left   = Rect.Left;
         DrawRect.top    = Rect.Top;
         DrawRect.right  = Rect.Right;
         DrawRect.bottom = Rect.Bottom;

         InflateRect(&DrawRect,-1,-1);

         if(Column -> Field -> AsInteger == 0)
            DrawState = DFCS_BUTTONCHECK;
         else
            DrawState = DFCS_CHECKED;

         DBGrid1 -> Canvas -> FillRect(Rect);
         DrawFrameControl(DBGrid1 -> Canvas -> Handle,&DrawRect,DFC_BUTTON,DrawState);
      }
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DBGrid1ColExit(TObject *Sender)
{
   if(DBGrid1 -> SelectedField -> FieldName == DBCheckBox1 -> DataField)
      DBCheckBox1 -> Visible = false;   
}
//---------------------------------------------------------------------------



En mi caso particular no uso DBGrids paa editar los campos, pero si ese fuera el caso deben también poner código en los eventos KeyPress del DBGrid y el Click del DBCheckBox, en el KeyPress lo que nos interesa es si el usario oprimio un TAB o un SPACE, para pasar al siguiente control o cambiar el estado del check box.

Y en para el Click del CheckBox vemos si está chequeado y cambiamos el Caption a lo que requerimos y listo.

Espero haberlos ayudado con la duda, Salu2
_________________
ISC
Dobermannmx
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Ay control que se llama DBControlGrid, con este elemento si te deja incluir un DBChexBox.
No tiene la misma apariencia que un dBGrid pero vale igualmente
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
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.