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

ListView仅显示单个产品项,如何添加剩余19个带图标的产品项?

解决ListView只显示单个产品项的问题

兄弟,我瞅了你的代码片段,为啥只显示1个产品?核心问题和几个遗漏点我给你列出来,再给你修正后的完整代码:

问题排查:

  • while循环没递增i:你写了while (i < 20),但循环体里没写i++,这会导致无限循环,永远只处理第1个产品,自然只显示1项。
  • 图片没加入ImageList:你下载了图标数据,但没把它添加到imageList里,ListView没法关联显示图标。
  • ListViewItem没添加到ListView:你创建了ListViewItem,但没把它加到prodview.Items集合里,当然不会显示。
  • 反序列化后的数据没绑定到Item:你拿到了dataDict,但没把产品名称/信息放到ListViewItem的文本里。

修正后的完整代码:

// 初始化ImageList,建议先设置图标大小(比如32x32)
ImageList imageList = new ImageList();
imageList.ImageSize = new Size(32, 32); // 根据你的需求调整尺寸
prodview.LargeImageList = imageList;

int i = 0;
while (i < 20)
{
    // 下载产品数据
    var json = c.DownloadString(url + (i + 1).ToString());
    // 下载产品图标
    var imageData = c.DownloadData(urlicon + (i + 1).ToString());
    
    // 反序列化JSON数据(假设Data类有Name属性)
    var dataDict = JsonConvert.DeserializeObject<List<Data>>(json);
    // 取第一个数据项(如果你的JSON是单个对象,可能要改成DeserializeObject<Data>)
    var productData = dataDict.FirstOrDefault();
    
    if (productData != null)
    {
        // 将图标添加到ImageList
        using (var ms = new MemoryStream(imageData))
        {
            imageList.Images.Add(Image.FromStream(ms));
        }
        
        // 创建ListViewItem,绑定产品名称,关联图标索引
        ListViewItem item = new ListViewItem(productData.Name);
        item.ImageIndex = i; // 图标索引和循环i对应,因为我们按顺序加的
        
        // 将Item添加到ListView的Items集合
        prodview.Items.Add(item);
    }
    
    // 关键:循环递增i,否则永远停在第一个
    i++;
}

额外注意点:

  • 如果你的JSON返回的是单个产品对象而不是数组,记得把DeserializeObject<List<Data>>改成DeserializeObject<Data>,避免空的List。
  • 网络请求建议加异常处理,比如try-catch,防止某个产品下载失败导致整个循环中断。
  • ImageList的图标尺寸要提前设置,不然显示可能会变形。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:21:19