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
相关产品推荐
相关产品推荐

