我尝试构建一个从数据库读取数据并使用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