c# – ListView以编程方式添加列显示项目类型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – ListView以编程方式添加列显示项目类型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3233字,纯文字阅读大概需要5分钟。
内容图文
![c# – ListView以编程方式添加列显示项目类型](/upload/InfoBanner/zyjiaocheng/814/9dde50a9cf414c08bb1d82afbc98efc5.jpg)
我在另一个程序集中得到了一个ListView,并希望为其添加一个列.列表视图中的项是该程序集中类的对象.
当我添加这样的列
var col : GridViewColumn = new GridViewColumn();
col.Header = "Header text";
list.View.Columns.Add(col);
列出现但列表视图中的所有行都具有该新列中项目类型的名称.即使我更改新列的值(itemclass.Items [newColIdx] =“zz”),也不会显示.没有涉及数据绑定或细胞模板.
这是为什么?
编辑:也许我可以增强问题:如果ListView.Items包含A类数组 – 如何在GridView中控制A的哪些内容?我需要逆向工程,DisplayMemberBinding为null,因此它不使用数据绑定AFAIK.
赏金问题:当每个项目(代表一行)调用ToString()时,它是如何映射到GridView的列的?如何更改行中的项目以便填充新列?
尝试找到此解决方案时的特殊问题是,它在较大的C#.NET应用程序中的JScript沙箱中运行,除了使用消息框和反射之外,不提供任何调试可能性.
编辑:问题是我正在编写一个在第三方.NET应用程序中运行的JScript,并让我有机会用.NET做很多事情.这是一个向listview添加功能的脚本.我可以访问listview,它由第三方应用程序填充数据库数据.我不知道它是怎么做到的.我可以以编程方式添加带有自定义内容的自定义行(而不是与DB相关).但是当我添加一个自定义列时,我似乎无法在den行中查看它的值.
添加的行的类型为3rdParty.ListRow,并包含一个属性Items,我为其分配一个字符串数组.数组的值显示在代表列中 – 但不会显示在添加的列中.在那里我只得到文本3rdParty.ListRow,这是因为在ListRow上调用了ToString().
那么:我怎样才能告诉新列(例如索引5)显示ListRow.Items [5]而不是ListRow.ToString()?我喜欢以与现有列相同的方式执行此操作,似乎Alex提到的所有属性都未定义.我如何设置DataMemberBinding以实现到ListRow.Items [5]的映射?
解决方法:
如果列没有DisplayMemberBinding或CellTemplate,则在网格中的每个项目上调用ToString,并将计算值用作单元格内容.
例如,如果你有课程:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public override string ToString()
{
return LastName;
}
}
如果将Person的集合绑定到网格视图:
var people =
new List<Person>
{
new Person { FirstName = "Peter", LastName = "Smith" },
new Person { FirstName = "Steve", LastName = "White" },
new Person { FirstName = "Dave", LastName = "Gates" },
};
listView1.ItemsSource = people;
如果您创建一个没有绑定的新列,那么LastName将显示在此列中,因为重写的ToString()将返回LastName.如果更改ToString以返回FirstName,则新列将显示FirstName.
希望我能正确理解你的问题.
[编辑]
如果添加许多新列并且不使用DisplayMemberBinding,则所有新列都将评估并显示ToString()结果.
您需要设置DisplayMemberBinding以显示特定属性.
var newColumn = new GridViewColumn();
newColumn.Header = "Test";
newColumn.DisplayMemberBinding = new Binding("FirstName");
gridView.Columns.Add(newColumn);
[编辑]
您的问题的答案:
When ToString() is called on every
item (which represents a row), how is
that mapped towards the columns of the
GridView? How must I alter an item in
the row so that the new column is
filled?
呈现单元格展示器时会调用ToString,除非您指定了绑定或模板,最后也会使用绑定.除非重写ToString或绑定到列的属性,否则不能更改行项以控制它在网格中的表示方式.
不确定我完全理解你的问题.你正在添加一个新列,对吗?为什么不在列上设置DisplayMemberBinding属性?如果您这样做,您将能够在列中显示您想要的任何内容.
[编辑]
我想我回答了你的赏金问题:).我想我已经获得了赏金:).
但是,这是您下一个问题的答案:
How would I set DataMemberBinding to achieve mapping to ListRow.Items[5]?
答案:
newColumn.DisplayMemberBinding = new Binding("Items[5]");
内容总结
以上是互联网集市为您收集整理的c# – ListView以编程方式添加列显示项目类型全部内容,希望文章能够帮你解决c# – ListView以编程方式添加列显示项目类型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。