列表视图中只显示一个项目

时间:2018-04-20 10:15:26

标签: c# winforms visual-studio

我需要制作一个带有各自图标的产品列表,但它只显示一个项目。共有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++;

                }

此版本的代码已经有效。回答如下。

1 个答案:

答案 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++;

    }