![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
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
|
||||
|
||||
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(...) { } } } //--------------------------------------------------------------------------- ![]() |
#6
|
||||
|
||||
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. |
#7
|
||||
|
||||
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 .... |
![]() |
|
|
![]() |
||||
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 |
![]() |
|