You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ListView中显示带多属性的自定义Book类对象列表?

在ListView中展示多属性Book对象列表的实现方法

问题背景

我定义了一个包含多属性的Book类,还写了一个返回对象列表的静态方法,代码如下:

class Book { 
    public string Title { get; set; } 
    public string Author { get; set; } 
    public string Year { get; set; } 
    public static List<Book> GetList() { 
        var bookList = new List<Book>(); 
        bookList.Add(new Book { Author = "Robin Cook", Title = "Vector", Year = "1999" }); 
        bookList.Add(new Book { Author = "J.K. Rowling", Title = "Harry Potter and Prisoner of Azkaban", Year = "1999" }); 
        bookList.Add(new Book { Author = "George R.R. Martin", Title = "A Dance with Dragons", Year = "2011" }); // 补全未写完的示例代码
        return bookList;
    }
}

现在想把这些Book对象的多个属性显示在ListView控件里,该怎么做?


解决方案(WinForms场景,最常用的情况)

嘿,这个需求很常见,咱们一步步来实现:

第一步:把ListView配置成多列展示模式

ListView默认不是多列布局,首先要把它的View属性设置为Details,然后添加对应Book属性的列头:

// 假设你的ListView控件名叫listViewBooks
listViewBooks.View = View.Details;

// 添加三个列,分别对应书名、作者、出版年份
listViewBooks.Columns.Add("书名", 220); // 第二个参数是列宽,可按需调整
listViewBooks.Columns.Add("作者", 180);
listViewBooks.Columns.Add("出版年份", 100);

// 可选:让列自动适应内容宽度,把宽度设为-2即可
// listViewBooks.Columns[0].Width = -2;

第二步:将Book列表数据映射到ListView中

接下来获取Book列表,遍历每个对象,创建ListViewItem并把属性值对应到列中:

// 获取所有Book数据
var bookList = Book.GetList();

// 先清空ListView里的旧数据(避免重复展示)
listViewBooks.Items.Clear();

foreach (var book in bookList)
{
    // 创建一个ListViewItem,第一个参数对应第一列(书名)
    var listItem = new ListViewItem(book.Title);
    // 添加子项,对应剩下的两列(作者、年份)
    listItem.SubItems.Add(book.Author);
    listItem.SubItems.Add(book.Year);
    // 把这个项加到ListView里
    listViewBooks.Items.Add(listItem);
}

进阶:用BindingSource管理数据源(支持动态更新)

如果之后你的Book列表可能会动态变化(比如新增、删除书籍),可以用BindingSource作为中间层来管理数据源,后续更新数据时会更方便:

// 创建BindingSource并绑定Book列表
var bookBindingSource = new BindingSource();
bookBindingSource.DataSource = Book.GetList();

// 绑定到ListView的逻辑和之前一致
listViewBooks.Items.Clear();
foreach (Book book in bookBindingSource)
{
    var listItem = new ListViewItem(book.Title);
    listItem.SubItems.Add(book.Author);
    listItem.SubItems.Add(book.Year);
    listViewBooks.Items.Add(listItem);
}

// 之后如果数据源变化了,调用这句刷新绑定
// bookBindingSource.ResetBindings(false);
// 然后重新执行一遍上面的遍历绑定逻辑(建议封装成单独方法)

小提示

  • 一定要确保ListView的View是Details,不然列和子项都不会显示出来!
  • 如果是WPF环境的ListView,实现方式会不一样(通常用GridView结合数据绑定),要是你需要WPF的方案,随时说哈~

内容的提问来源于stack exchange,提问作者blue piranha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:50:47