我需要制作一个带有各自图标的产品列表,但它只显示一个项目。共有20个产品。我怎样才能插入其他19件物品?
代码:
ImageList imageList = new ImageList();
prodview.LargeImageList = imageList;
while (i < 20)
{
var json = c.DownloadString(url + (i + 1).ToString());
var image = c.DownloadData(urlicon + (i + 1).ToString());
var dataDict = JsonConvert.DeserializeObject<List<Data>>(json);
ListViewItem item = new ListViewItem();
foreach (var data in dataDict)
item.Text = data.name;
imageList.ImageSize = new Size(100, 100);
imageList.Images.Add(i.ToString(), new Bitmap(new MemoryStream(image)));
item.ImageIndex = i;
prodview.Items.Add(item);
i++;
}
此版本的代码已经有效。回答如下。
答案 0 :(得分:1)
您的逻辑存在问题
表示i = 0到19 ..
下载数据/字符串创建新列表项创建新图像列表 datadict set item.text
中的foreach项将1张图片添加到图片列表
对于当前在图像列表中的所有项目(也称为1),将其添加到prodview RPT
所以你最后只有1个项目,因为你每次都重新列出项目列表,每次都重新生成每个变量。
你几乎肯定想要这样的东西:
ImageList imageList = new ImageList();
在while循环之前。下面也不需要循环 - 否则重复。
prodview.LargeImageList = imageList;
item.ImageIndex = i;
prodview.Items.Add(item);
可能存在其他问题 - 例如我不相信图像但是......从那里开始
调整我的代码..
您的代码可能最终应该像
一样 ImageList imageList = new ImageList();
prodview.LargeImageList = imageList;
while(i <20)
{
var json = c.DownloadString(url + (i + 1).ToString());
var image = c.DownloadData(urlicon + (i + 1).ToString());
var dataDict = JsonConvert.DeserializeObject<List<Data>>(json);
ListViewItem item = new ListViewItem();
// not sure what you were trying to do here as it would always end up with the last name..
// foreach (var data in dataDict)
// item.Text = data.name;
item.Text = "item "+i; // giving it a name
imageList.ImageSize = new Size(100, 100);
imageList.Images.Add(i.ToString(), new Bitmap(new MemoryStream(image)));
item.ImageIndex = i;
prodview.Items.Add(item);
i++;
}