【发布时间】:2011-03-07 10:06:42
【问题描述】:
我在另一个程序集中有一个 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]?
【问题讨论】:
-
看起来虽然你的赏金问题得到了回答,但你不会放弃赏金。只是不公平。
-
刚出国。颁发赏金。感谢您的帮助。
-
谢谢。希望它对你有用。
-
@Alex - 我现在了解机制,在我的最后一条评论中,我要求举个例子:“我将如何做到这一点,以便它绑定到 ListRow.Items[5] 而不是 ListRow.ToString( )(就像现在发生的那样)?”那么,如果您有任何线索,我将分配给 DisplayMemberBinding 什么。我看到无法从现有列中获取它。如果你不知道我会暂时离开这个问题。
-
那么,
newColumn.DisplayMemberBinding = new Binding("Items[5]");没用?
标签: c# wpf listview datagridview jscript.net