我在另一个程序集中有一个 ListView 并想向它添加一列。列表视图中的项目是该程序集中某个类的对象。
当我添加这样的列时
var col : GridViewColumn = new GridViewColumn();
col.Header = "Header text";
list.View.Columns.Add(col);
该列出现,但列表视图中的所有行都具有该新列中项目类型的名称。即使我更改了新列 ( itemclass.Items[newColIdx] = "zz"
) 的值,它也不会显示。不涉及数据绑定或单元格模板。
这是为什么?
编辑:也许我可以加强这个问题:如果 ListView.Items 包含一个 A 类数组 - 你如何控制 A 的哪些东西在 GridView 中如何显示?我在这里需要逆向工程,DisplayMemberBinding 为空,因此它不使用数据绑定 AFAIK。
赏金问题:ToString()
在每个项目(代表一行)上调用时,它是如何映射到 GridView 的列的?我必须如何更改行中的项目以填充新列?
尝试找到此解决方案时的特殊问题是,它在更大的 C# .NET 应用程序中的 JScript 沙箱中运行,并且除了使用消息框和反射之外没有提供调试可能性。
编辑:问题是我正在编写一个在第 3 方 .NET 应用程序中运行的 JScript,它让我有机会用 .NET 做很多可能的事情。这是一个向列表视图添加功能的脚本。我可以访问列表视图,它由第 3 方应用程序填充数据库数据。我不知道它是怎么做到的。我可以以编程方式添加具有自定义内容的自定义行(与数据库无关)。但是当我添加一个自定义列时,我似乎无法在 den 行中设置它的值。
添加的行是一种类型3rdParty.ListRow
,并包含一个属性Items
,我为其分配了一个字符串数组。数组的值显示在代表列中 - 但不在添加的列中。在那里我只得到了3rdParty.ListRow
因为ToString()
在 ListRow 上被调用的文本。
那么:如何告诉新列(例如索引 5)显示ListRow.Items[5]
而不显示ListRow.ToString()
?我喜欢以与已经存在的列相同的方式执行此操作,似乎 Alex 提到的所有属性都在那里未定义。我将如何设置DataMemberBinding
以实现映射到ListRow.Items[5]
?