![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Checkbox en un DBGrid
Buenas a todos. A ver si me podéis ayudar que no sé por dónde salir. La aplicaicón está hecah con Builder 6 y tengo este DBGrid cargado a partir de una tabla en FB, por lo tanto no tiene campos tipo BOOL y uso uno SMALLINT, en el que he conseguido meter un Checkbox cogiendo trozos de código.
![]() Y tengo este código: Código:
void __fastcall TfAboRec::DBGrid1DrawColumnCell(TObject *Sender,
const TRect &Rect, int DataCol, TColumn *Column,
TGridDrawState State)
{
TCanvas *c = DBGrid1->Canvas;
if (Column->FieldName == "SELECCION")
DibujarCheckBox(c, Rect, Column->Field->AsInteger);
else
DBGrid1->DefaultDrawColumnCell(Rect, DataCol, Column, State);
}
//---------------------------------------------------------------------------
void __fastcall TfAboRec::DibujarCheckBox(TCanvas *c, const TRect &Rect, int Valor)
{
TRect r = Rect;
UINT Checked = (!Valor ? DFCS_BUTTONCHECK : DFCS_BUTTONCHECK | DFCS_CHECKED);
c->FillRect(Rect);
r.Top += 2;
r.Bottom -= 1;
r.Left += 1;
r.Right -= 1;
DrawFrameControl(c->Handle, (RECT*)&r, DFC_BUTTON, DFCS_BUTTONCHECK | Checked);
}
//---------------------------------------------------------------------------
void __fastcall TfAboRec::DBGrid1CellClick(TColumn *Column)
{
int nValor;
if (Column->FieldName == "SELECCION")
{
nValor = Column->Field->AsInteger;
fPersona->tTemp->Edit();
fPersona->tTemp->FieldValues[Column->FieldName] = !nValor;
fPersona->tTemp->Post();
}
}
//---------------------------------------------------------------------------
|
|
#2
|
||||
|
||||
|
Por cierto, que se me olvidó: La tabla que alimenta al DBGrid está definida así:
|
|
#3
|
||||
|
||||
|
¿Dónde está el update?
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#4
|
||||
|
||||
|
Hola.
De este modo tiene que funcionarte: Código PHP:
Y en la definición de la tabla agregaría:
Y, como lógicamente te indica Casimiro, tu DataSet tiene que tener la capacidad de actualizar la tabla. Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 02-09-2016 a las 20:39:51. Razón: cambiar nombre de tabla |
|
#5
|
||||
|
||||
|
Pues no, tampoco actualiza la tabla. Al final encontré uan forma un pelín "pedestre", pero fumciona y hasta que encuentre una mejor me vale:
Código:
void __fastcall TfAboRec::DBGrid1CellClick(TColumn *Column)
{
int nCodigo, nValor;
if (Column->FieldName == "SELECCION")
{
nValor = Column->Field->AsInteger;
nCodigo = DBGrid1->Columns->Items[4]->Field->Value;
fPersona->tTemp->Close(); // Cierro al tabal ANTES de actualizar
fPersona->Query->Close();
fPersona->Query->SQL->Text = "UPDATE " + cTabTemp + " SET Seleccion = :Seleccion WHERE Codigo = :Codigo";
fPersona->Query->ParamByName("Seleccion")->AsInteger = nValor == 0 ? 1 : 0;
fPersona->Query->ParamByName("Codigo")->AsInteger = nCodigo;
try
{
fPersona->Query->ExecSQL();
fPersona->Query->Transaction->Commit();
fPersona->tTemp->Open(); // Vuelvo a abrir la tabla
}
catch(...)
{
}
}
}
Última edición por Angel.Matilla fecha: 05-09-2016 a las 10:21:26. |
|
#6
|
||||
|
||||
|
Hola Angel.Matilla.
Bueno, pero eso era debido al tipo de componente data aware que estabas usando o la forma en que lo usabas. Varios juegos de componentes permiten asociarle a sus "queries" un componente updatesql que te evitaría escribir ese código, como por ejemplo la dupla TIBQuery/TIBUpdateSQL. Pero para ser mas específico habría que saber que componentes estas usando. Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
#7
|
||||
|
||||
|
En el código, al final:
Código:
void __fastcall TfAboRec::DBGrid1CellClick(TColumn *Column)
{
int nValor;
if (Column->FieldName == "SELECCION")
{
nValor = Column->Field->AsInteger;
fPersona->tTemp->Edit();
fPersona->tTemp->FieldValues[Column->FieldName] = !nValor;
fPersona->tTemp->Post();
}
}
//---------------------------------------------------------------------------
Código:
void __fastcall TfAboRec::DBGrid1CellClick(TColumn *Column)
{
int nCodigo, nValor;
if (Column->FieldName == "SELECCION")
{
nValor = Column->Field->AsInteger;
nCodigo = DBGrid1->Columns->Items[4]->Field->Value;
Query->Close();
Query->SQL->Text = "UPDATE " + cTabTemp + " SET Seleccion = :Seleccion WHERE Codigo = :Codigo";
Query->ParamByName("Seleccion")->AsInteger = nValor == 0 ? 1 : 0;
Query->ParamByName("Codigo")->AsInteger = nCodigo;
try
{
Query->ExecSQL();
Query->Transaction->Commit();
}
catch(...)
{
}
}
}
//---------------------------------------------------------------------------
![]() |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| CheckBox en DBGrid | DrkMgc | Varios | 9 | 18-05-2011 17:41:47 |
| Checkbox en un DBGrid | alfil123 | Conexión con bases de datos | 1 | 25-10-2006 19:02:57 |
| Checkbox en un dbgrid | el_barto | OOP | 7 | 25-08-2005 10:08:21 |
| DBgrid y Checkbox | santi | Varios | 2 | 24-01-2005 18:25:53 |
| CheckBox en un DBGrid | DJ VMan | MySQL | 4 | 26-06-2003 17:05:26 |
|