我正在尝试构建一个从数据库读取数据并使用 Firemonkey 中的 TGrid 将其显示为表的工具。我需要使用不同类型的列,例如 TCheckColumn 和 TPopupColumn,但找不到任何关于如何在 C++ Builder 中使用它们的好的指南或示例。
无论如何,我设法了解了 TStringColumn、TProgressColumn 的用法,用于在 TGrid 的事件 onGetValue 中设置单元格的值。
你们中有人知道如何为 TCheckColumn、TImageColumn 和 TPopupColumn 类型的列设置值吗?
谢谢丹尼尔
- -更新 - -
我设法使用了 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);
- -更新 - -
如果我使用 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);
}
在我单击一个复选框后,所有其他复选框都会更改状态。所以组件可以正常工作......现在的重点是如何以正确的方式将 Value 设置为 true 或 false。