| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
ArcTaRuS Invitado
|
Publicado: Mie 12 Ene, 2005 8:46 am Asunto: Crear un CheckBox dentro de un DBGrid |
|
|
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 |
|
 |
rayder Master

Registrado: 03 Mar 2004Mensajes: 207
|
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 12 Ene, 2005 2:25 pm Asunto: |
|
|
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 |
|
 |
LordNemesis Master


Registrado: 31 Dic 2003Mensajes: 340Ubicación: México
|
Publicado: Mie 12 Ene, 2005 5:44 pm Asunto: |
|
|
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 |
|
 |
cecito Capt

Registrado: 25 Nov 2003Mensajes: 164Ubicación: Arequipa - Perú
|
|
| Volver arriba |
|
 |
ArcTaRuS Invitado
|
Publicado: Jue 13 Ene, 2005 8:35 am Asunto: Gracias |
|
|
| 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 |
|
 |
|