ObjectListView-显示数组
本文关键字:数组 显示 ObjectListView- | 更新日期: 2023-09-27 18:22:35
假设我有这样的代码:
public sealed class MyStruct {
// ... snip
public uint[] ItemStatValue { get; set; }
// ... snip
}
// MainForm.cs
// ...
Generator.GenerateColumns(this.ContentListView, structure, true);
ContentListView.SetObjects(_records);
// ...
有没有一种方法可以指示GenerateColumns将ItemStateValue属性的每个元素视为自己的列,并适当地命名它们?("Item Stat Value 1"、"Item Stat Value 2"等)目前,它只是对对象调用ToString(),因此返回System.Type.UInt32[]。这不是我想要的。
我正在使用http://www.codeproject.com/Articles/16009/A-Much-Easier-to-Use-ListView
干杯!
不,这是不可能的。OLV使用对指定项目类型的反映来收集所需的信息。如果你提供了一个IEnumerable,它只会查看第一个项目的类型。
Generator
没有任何线索,也不关心您的项目的实际实例。此外,在您提出的情况下,这也没有多大意义,因为每个结构的元素数量可能不同。
数组中有多少项?ListView具有固定数量的列,即每行具有相同数量的列。
如果你知道会有20个可能的统计数据,只需生成列即可。
const int numberOfColumns = 20;
for (int i = 0; i < numberOfColumns; i++) {
var statIndex = i;
var column = new OLVColumn();
column.Name = "Stat" + i;
column.AspectGetter = delegate(object x) {
MyStruct myStruct = (MyStruct)x;
return statIndex < myStruct.ItemStatValue.Length ? (uint?)myStruct.ItemStatValue[statIndex] : null;
};
column.AspectToStringConverter = delegate(object x) {
uint? value = (uint?)x;
return value.HasValue ? String.Format("Stat value: {0}", value.Value) : String.Empty;
};
this.ContentListView.AllColumns.Add(column);
}
this.ContentListView.RebuildColumns();
在GenerateColumes()之后调用此函数
@Grammarian因此,在查看了代码之后,我注意到字段的方面getter。然而,Generator.GenerateColumns似乎没有使用它的第三个布尔参数allProperties。
所以我把这个快速代码拼凑在一起,果不其然,它奏效了。它似乎也不会引起任何错误,这很好。
要点如下:
https://gist.github.com/Warpten/c792ad66ad20cc69a918
注意:这还需要允许OLVColumnAttribute和OLVIgnoreAttribute应用于字段。这很容易;)
干杯!