我嘗試構建一個從數據庫讀取數據並使用Firemonkey中的TGrid顯示它的工具。我需要使用不同類型的列,如TCheckColumn和TPopupColumn,但找不到任何有關如何在C++ Builder中使用它們的好指南或示例。Firemonkey:在Embarcadero C++ Builder XE3上使用TGrid
任何方式,我設法瞭解TStringColumn,TProgressColumn的用法設置TGrid的事件onGetValue單元格的值。
是否有人知道如何設置TCheckColumn,TImageColumn和TPopupColumn類型的列的值?
感謝 丹尼爾
--- UPDATE ---
我設法使用TProgressColumn。這是我在窗體的構造做:
// TStringColumn
Grid1->AddObject(new TStringColumn(this));
// TCheckColumn
TCheckColumn* c = new TCheckColumn(this);
Grid1->AddObject(c);
// TPopupColumn
// list of values
TStringList * l = new TStringList(NULL);
l->Add(L"First");
l->Add(L"Second");
l->Add(L"Third");
TPopupColumn* p = new TPopupColumn(this);
// adding the list to the PopupColumn
p->Items = l;
Grid1->AddObject(p);
// TProgressColumn
Grid1->AddObject(new TProgressColumn (this));
Grid1->RowCount = 3 ;
,這是Grid1GetValue方法:
// TStringColumn
if(Col == 0) Value = TValue::From<String>(Row);
// TCheckColumn !! Can't make it work
if(Col == 1) Value = TValue::From<Boolean>(true);
// TPopupColumn
if(Col == 2) Value = TValue::From<int>(2);
// TProgressColumn
if(Col == 3) Value = TValue::From<double>(50.0);
--- UPDATE ---
如果我保存列的值使用該方法OnSetValue
void __fastcall TForm1::Grid1SetValue(...)
{
if(Col == 1) check = Value;
}
,然後用該方法OnGetValue設置它:
void __fastcall TForm1::Grid1GetValue(...)
{
// TCheckColumn !! Can't make it work
if(Col == 1) Value = check;// TValue::From<Boolean>(true);
}
當我點擊一個複選框後,所有其他複選框會改變狀態。所以組件工作正確......現在重點是如何以正確的方式將值設置爲true或false。
實際上代碼是非常類似的(我已經把我的代碼放在帖子的更新中)。你有沒有使用TCheckColumn? – 2013-03-22 14:57:58
您是否在設置值時遇到問題,或者CheckColumn是否忽略了您設置的值? – 2013-03-22 17:53:44
實際上,我發現如果將OnSetValue方法中的單元格的值保存並將其分配給OnGetValue方法中的單元格,則其他行會更改它的狀態。 – 2013-03-27 10:03:59