| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
martinlop2007 Lt JG


Registrado: 20 Feb 2007Mensajes: 67
|
Publicado: Vie 15 Jun, 2007 3:14 pm Asunto: CheckBox dentro de un DBgrid |
|
|
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 |
|
 |
martinlop2007 Lt JG


Registrado: 20 Feb 2007Mensajes: 67
|
Publicado: Vie 15 Jun, 2007 6:32 pm Asunto: |
|
|
| 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 |
|
 |
jacko Master


Registrado: 03 Sep 2005Mensajes: 287Ubicación: Colombia
|
Publicado: Dom 17 Jun, 2007 11:12 pm Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Lun 18 Jun, 2007 11:17 am Asunto: |
|
|
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 |
|
 |
dobermannmx Master


Registrado: 30 Ago 2006Mensajes: 191Ubicación: Zapopan, Jal. - México
|
Publicado: Lun 18 Jun, 2007 5:51 pm Asunto: |
|
|
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 |
|
 |
pareja20 Cdt

Registrado: 26 May 2006Mensajes: 14
|
Publicado: Lun 18 Jun, 2007 9:05 pm Asunto: |
|
|
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 |
|
 |
|