【问题标题】:How to get data from ListViewItem; WinForms, C#如何从 ListViewItem 中获取数据; WinForms, C#
【发布时间】:2017-04-22 08:32:25
【问题描述】:

我正在将一个表单中的项目添加到不同表单上的列表视图中,并希望将列表视图中的每个项目保存到 JSON 文件中。我不知道如何做到这一点,并查看了几个地方,但似乎人们使用的方法与我使用的方法不同,或者我做错了。

这是我用来将项目添加到列表视图的代码,我如何访问每个 ListViewItem 中的每条数据以便能够将其全部保存到 JSON 文件中?

ListView lv = (ListView)lf.Controls["mainListView"];
        ListViewItem lvi = new ListViewItem();
        lvi.Text = Data.Name;
        lvi.Tag = Data;
            switch (Data.Type)
            {
                case "Anime":
                    lvi.ImageIndex = 0;
                    break;
                case "Book":
                    lvi.ImageIndex = 1;
                    break;
                case "Comic":
                    lvi.ImageIndex = 2;
                    break;
                case "Game":
                    lvi.ImageIndex = 3;
                    break;
                case "Manga":
                    lvi.ImageIndex = 4;
                    break;
                case "Movie":
                    lvi.ImageIndex = 5;
                    break;
                case "Other":
                    lvi.ImageIndex = 6;
                    break;
                case "TV":
                    lvi.ImageIndex = 7;
                    break;
            }
        lv.Items.Add(lvi);

这里是 Values 类的信息,在这个表单中被命名为“Data”。

public Values Data
    {
        get
        {
            Values v = new Values();
            v.Name = itemNameTxt.Text;
            v.Type = itemTypeCmb.Text;
            v.TypeName = typeNameTxt.Text;
            v.Status = statusCmb.Text;
            v.Completed = completedNUD.Value;
            v.URL = imageUrlTxt.Text;
            v.RateOne = rating1.Checked;
            v.RateTwo = rating2.Checked;
            v.RateThree = rating3.Checked;
            v.RateFour = rating4.Checked;
            v.RateFive = rating5.Checked;

            return v;
        }
        set
        {
            itemNameTxt.Text = value.Name;
            itemTypeCmb.Text = value.Type;
            typeNameTxt.Text = value.TypeName;
            statusCmb.Text = value.Status;
            completedNUD.Value = value.Completed;
            imageUrlTxt.Text = value.URL;
            rating1.Checked = value.RateOne;
            rating2.Checked = value.RateTwo;
            rating3.Checked = value.RateThree;
            rating4.Checked = value.RateFour;
            rating5.Checked = value.RateFive;
        }
    }

【问题讨论】:

    标签: c# json winforms listview listviewitem


    【解决方案1】:

    您似乎将用于填充ListViewItemValues 类实例存储在Tag 属性中:

    lvi.Tag = Data;
    

    因此您可以在需要时从那里提取它。例如:

    ListView lv = ...;
    var valueList = lv.Items.Cast<ListViewItem>()
        .Select(lvi => (Values)lvi.Tag)
        .ToList();
    

    【讨论】:

    • 我最终重做了很多代码并找到了一个更理想的解决方案,但我一开始确实尝试过它并且它有效,所以我会说这是我原始代码问题的正确答案.谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 2021-06-06
    • 2012-11-16
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 2020-07-09
    相关资源
    最近更新 更多