当使用带有 TFDMemTable 的 LiveBindingsDesigner 时,带有 TImageObjectAppearance 的 TListView DynamicAppearance 将不会查看图像
TListView DynamicAppearance with TImageObjectAppearance will not view image when using LiveBindingsDesigner with TFDMemTable
我欢迎 Embarcaderos 为使 TListView 更加动态化所做的努力,并且很高兴看到 Sarina Duponts post here 在那里你可以 link LiveBindings 中 TListView 属性的图像索引使用 DynamicAppearance 和 TImageObjectAppearance 时,Designer,甚至图像 属性 到数据字段(整数)。
但是...我试过了,几乎成功了。
在我的挑战中,我有一个应用程序,我在其中使用带有 TREST* 函数的 TFDMemTable 来填充 TFDMemTable。如果我不使用 DynamicAppearance 并使用 ImageListItem 和 links 我想使用 LiveBindings Designer 中的图像索引 属性 的数据字段,一切都很好。
尽管使用 DynamicApperance,没有图像索引 属性 到 link,但是 Sarina Dupont 在这里 post 说你可以 link 整数字段直接到图片 属性(IDE/compiler 会弄清楚)。
好吧...我想出了以下结论:我的数据字段(从 TREST* 和 TFDMemTable 半创建)并不一定是它们看起来的样子。由于我使用的是 REST/JSON,字段类型是 "anonymized" 到 WideString,实际上 FieldDefs->'dataitem'->DataType 设置为 "ftWideString"。我试图将此值更改为 ftInteger,希望这会有所帮助,但我确实收到了此错误消息:"FDMemtTable1: Type mismatch in field for 'datafield', exepecting: WideString actual: Integer"。
所以...我快到了,我真的很想使用 DynamicAppearance 并为每个 TListViewItem 查看多个图像和文本字段...
...或者动态创建 ListViewItem 'Template' 并用数据填充它更容易,最好的方法是什么?
我通常尽量避免使用 LiveBindings。最快、最稳定和最简单的方法是使用代码添加项目。
ListView1->BeginUpdate();
try {
for (int i = 0; i < arrayOfThings->item.Length; i++) {
TListViewItem* item = ListView1->Items->Add();
item->Text = arrayOfThings->item[i]->item_name;
item->Data["itemName"] = TValue::From<UnicodeString>( arrayOfThings->item[i]->item_name);
item->Data["itemId"] = TValue::From<UnicodeString>( IntToStr( arrayOfThings->item[i]->id ));
item->Data["itemDate"] = TValue::From<UnicodeString>(arrayOfThings->item[i]->item_date);
// adding the image - imgClock is name of the image field [TImageObjectAppearance ] added to items in ItemAppearance in the TListView object that uses DynamicAppereance
const UnicodeString imgClock = L"imgClock";
dynamic_cast<TListItemImage*>(item->Objects->FindDrawable(imgClock))->Bitmap = //bitmap source;
}
} catch (...) {
}
ListView1->EndUpdate();
我欢迎 Embarcaderos 为使 TListView 更加动态化所做的努力,并且很高兴看到 Sarina Duponts post here 在那里你可以 link LiveBindings 中 TListView 属性的图像索引使用 DynamicAppearance 和 TImageObjectAppearance 时,Designer,甚至图像 属性 到数据字段(整数)。
但是...我试过了,几乎成功了。
在我的挑战中,我有一个应用程序,我在其中使用带有 TREST* 函数的 TFDMemTable 来填充 TFDMemTable。如果我不使用 DynamicAppearance 并使用 ImageListItem 和 links 我想使用 LiveBindings Designer 中的图像索引 属性 的数据字段,一切都很好。
尽管使用 DynamicApperance,没有图像索引 属性 到 link,但是 Sarina Dupont 在这里 post 说你可以 link 整数字段直接到图片 属性(IDE/compiler 会弄清楚)。
好吧...我想出了以下结论:我的数据字段(从 TREST* 和 TFDMemTable 半创建)并不一定是它们看起来的样子。由于我使用的是 REST/JSON,字段类型是 "anonymized" 到 WideString,实际上 FieldDefs->'dataitem'->DataType 设置为 "ftWideString"。我试图将此值更改为 ftInteger,希望这会有所帮助,但我确实收到了此错误消息:"FDMemtTable1: Type mismatch in field for 'datafield', exepecting: WideString actual: Integer"。
所以...我快到了,我真的很想使用 DynamicAppearance 并为每个 TListViewItem 查看多个图像和文本字段...
...或者动态创建 ListViewItem 'Template' 并用数据填充它更容易,最好的方法是什么?
我通常尽量避免使用 LiveBindings。最快、最稳定和最简单的方法是使用代码添加项目。
ListView1->BeginUpdate();
try {
for (int i = 0; i < arrayOfThings->item.Length; i++) {
TListViewItem* item = ListView1->Items->Add();
item->Text = arrayOfThings->item[i]->item_name;
item->Data["itemName"] = TValue::From<UnicodeString>( arrayOfThings->item[i]->item_name);
item->Data["itemId"] = TValue::From<UnicodeString>( IntToStr( arrayOfThings->item[i]->id ));
item->Data["itemDate"] = TValue::From<UnicodeString>(arrayOfThings->item[i]->item_date);
// adding the image - imgClock is name of the image field [TImageObjectAppearance ] added to items in ItemAppearance in the TListView object that uses DynamicAppereance
const UnicodeString imgClock = L"imgClock";
dynamic_cast<TListItemImage*>(item->Objects->FindDrawable(imgClock))->Bitmap = //bitmap source;
}
} catch (...) {
}
ListView1->EndUpdate();