|
Тема |
Re: CheckBox in DBGrid [re: Pechenia] |
|
Автор | turtle (Нерегистриран) | |
Публикувано | 21.12.02 13:52 |
|
|
Аз съм направил в дадена колона да се показва CheckBox във всички клетки като съм направил състоянията на CheckBox-a като Bitmap и ги прерисувам в OnDrawColumnCell в зависимост от съдържанието на поле от таблицата, т.е. ако полето е 0 рисувам UnChecked CheckBox а ако е 1 Ckecked CheckBox.
Ето и малко код само че C++(Работя със C++Builder 6.)
void __fastcall TfrmMain::DBGrid3DrawColumnCell(TObject *Sender,
const TRect &Rect, int DataCol, TColumn *Column,
TGridDrawState State)
{
Graphics::TBitmap *ImSel;
ImSel = new Graphics::TBitmap;
if(Column->FieldName == "Select")
{
DBGrid3->Canvas->Brush->Color = clWhite;
DBGrid3->Canvas->FillRect(Rect);
if(ADOTask->FieldByName("Select")->AsString == '0')
{
ImageList1->GetBitmap(0,ImSel);
}
else
{
ImageList1->GetBitmap(1,ImSel);
}
DBGrid3->Canvas->Draw((Rect.Left+2 + Rect.Right - ImSel->Width)/2,Rect.Top+1, ImSel);
delete ImSel;
}
}
При кликване върху клетката, т.е. върху Bitmap-a(CheckBox) се изпълнява код в събитието OnCellClick.Променя се съдържанието на полето от таблицата което съхранява състоянието на CheckBox-a,и по което поле се изрисува съответното му състояние в клетките на колоната от DBGrid-a.
Ето и съответният код:
void __fastcall TfrmMain::DBGrid3CellClick(TColumn *Column)
{
if(Column->FieldName == "Select")
{
ADOTask->Edit();
if(ADOTaskSelect->AsString == '0')
ADOTaskSelect->AsString = '1';
else
ADOTaskSelect->AsString = '0';
ADOTask->Post();
}
}
Проблема се явява когато е селецтирана дадена клетка, т.е. е във фокус и се кликне с мишката върху нея се появява истинската стойност на полето, т.е. 1 или 0 и полето изпада в състояние Edit().Като се промени фокуса на друга клетка се появява съответния CheckBox(Bitmap-a) в клетката където е била истинската стойност.
Искам когато клетката с CheckBox-a е във фокус и се кликне върху нея да се смени само състоянието а не да се показва истинската стойност.Когато клетката не е във фокус няма проблеми.Състоянието на CheckBox-a Се променя.
Е този проблем не мога да го реша от доста време насам затова го поставям във форума.
Дано някой помогне.
|
| |
|
|
|