0

我欢迎 Embarcaderos 努力使 TListView 更加动态化,并且很高兴看到 Sarina Duponts 的帖子在这里您可以将 imageindex 链接到 LiveBindings Designer 中的 TListView 属性,甚至在使用 DynamicAppearance 时将 image 属性链接到数据字段(整数)和TImageObject 外观。

但是……我试过了,而且几乎成功了。

在我的挑战中,我有一个应用程序,我使用带有 TREST* 函数的 TFDMemTable 来填充 TFDMemTable。如果我不使用 DynamicAppearance 并使用 ImageListItem 并使用 LiveBindings Designer 将我想要使用的数据字段链接到 TListView 中的 imageindex 属性,那么一切都很好。

尽管使用 DynamicApperance,没有可链接的 imageindex 属性,但 Sarina Dupont 在此处的帖子中说,您可以将整数字段直接链接到 image 属性(IDE/编译器会弄清楚)。

嗯......我想出了以下几点:我的数据字段(从 TREST* 和 TFDMemTable 生成)不一定是它们看起来的样子。由于我使用的是 REST/JSON,因此字段类型被“匿名化”为 WideString,实际上 FieldDefs->'dataitem'->DataType 设置为“ftWideString”。我试图将此值更改为 ftInteger,希望这会有所帮助,但我确实收到了以下错误消息:“FDMemtTable1:'datafield' 的字段类型不匹配,预期:WideString 实际:整数”。

所以...我快到了,我真的很想使用 DynamicAppearance 并查看每个 TListViewItem 的多个图像和文本字段...

...或者更容易动态地制作 ListViewItem 'Template' 并用数据填充它,最好的方法是什么?

4

1 回答 1

1

我通常尽量避免使用 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();
于 2016-09-29T07:58:56.960 回答