Проблема сохранения и загрузки просмотра в Visual Studio C # listview - PullRequest
0 голосов
/ 29 сентября 2019

У меня проблема с элементами представления Visual Studio c #, из-за которой я не могу найти решение по поиску.

Я сделал из приложения со списком, я могу добавлять, удалять, обновлять элементы списка.Я сохраняю и загружаю представление списка в / из файла правильно с этим кодом:

 private void saveListViewItems(string path, ListView lv)
    {
        var delimeteredListviewData = new List<string>();
        string delimeteredItems = string.Empty;

        foreach (ListViewItem lvi in lv.Items)
        {

            foreach (ListViewItem.ListViewSubItem lvsi in lvi.SubItems)
            {

                    delimeteredItems += lvsi.Text + "#";

            }
            delimeteredListviewData.Add(delimeteredItems);
        }


        System.IO.File.WriteAllLines(path, delimeteredListviewData.ToArray());
    }

    private void loadListViewItems(string path, ListView lv)
    {

        foreach (string line in System.IO.File.ReadAllLines(path))
        {
            lv.Items.Add(new ListViewItem(line.Split(new char[] { '#' }, StringSplitOptions.RemoveEmptyEntries)));

        }
    }

проблема в том, что я активировал флажок рядом с каждым элементом.Я не могу сохранить элементы списка с установленным флажком.Я хочу сохранить просмотр списка и загрузить с выбранными элементами.спасибо

enter image description here

Ответы [ 4 ]

0 голосов
/ 30 сентября 2019

Я управлял программой для работы.Я был не прав насчет способа чтения / записи текстового файла.теперь я использую ini-parser nuget.

установленный ini parser для проекта.затем:

с использованием IniParser;

с использованием IniParser.Model;

 private void saveListViewItems(string path, ListView lv)
    {
        int i = 0;
        string IPFrom;
        string IPFromval;
        string IPTO;
        string IPTOval;
        string Comment;
        string Commentval;
        string CheckState;
        string CheckStateval;
        int IPSectioncount;

        var parser = new FileIniDataParser();
        IniData data = parser.ReadFile(path);



                while ( i < lv.Items.Count) {

                    if ((lv.Items[i].Selected) || (lv.Items[i].Checked))
                    {
                        CheckStateval = "1";
                    }
                    else
                    {
                        CheckStateval = "0";
                    }

                CheckState = "";
                CheckState = "CheckState";
                CheckState += String.Join(CheckState, i);
                IPFromval = lv.Items[i].SubItems[0].Text;

                IPFromval = "";
                IPFrom = "IPFrom";
                IPFrom += String.Join(IPFrom, i);
                IPFromval = lv.Items[i].SubItems[0].Text;

                IPTOval = "";
                IPTO = "IPTO";
                IPTO += String.Join(IPTO, i);
                IPTOval = lv.Items[i].SubItems[1].Text;

                Commentval = "";
                Comment = "Comment";
                Comment += String.Join(Comment, i);
                Commentval = lv.Items[i].SubItems[2].Text;




                data["IP"][CheckState] = CheckStateval;
                data["IP"][IPFrom] = IPFromval;
                data["IP"][IPTO] = IPTOval;
                data["IP"][Comment] = Commentval;



                i++;
                }


                IPSectioncount = lv.Items.Count;
                data["IP"]["IPSectionCount"] = IPSectioncount.ToString();
                parser.WriteFile(path, data);


    }


    private void loadListViewItems(string path, ListView lv)
    {
        string IPFrom;
        string IPTO;
        string Comment;
        string CheckState;
        string IPSectioncount;
        string row="";



        var parser = new FileIniDataParser();
        IniData data = parser.ReadFile(path);

        IPSectioncount = data["IP"]["IPSectionCount"];
        int m = Int32.Parse(IPSectioncount);



        int i = 0;


        while ( i < m )
        {
            IPFrom = "";
            IPTO = "";
            Comment = "";
            row = "";


            IPFrom = "IPFrom";
            IPFrom += String.Join(IPFrom, i);
            IPFrom = data["IP"][IPFrom];


            IPTO = "IPTO";
            IPTO += String.Join(IPTO, i);
            IPTO = data["IP"][IPTO];


            Comment = "Comment";
            Comment += String.Join(Comment, i);
            Comment = data["IP"][Comment];

            CheckState = "CheckState";
            CheckState += String.Join(CheckState, i);
            CheckState = data["IP"][CheckState];

            row = String.Join(",",IPFrom,IPTO,Comment);


                            lv.Items.Add(new ListViewItem(row.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)));

                            if (CheckState == "1")
                            {
                                lv.Items[i].Checked = true;
                            }



                i++;




        }





    }
0 голосов
/ 29 сентября 2019

Вместо сохранения только строки вам нужно сохранить больше информации.Вы можете добавить добавить значение IsChecked вместе с вашей строкой.Вам нужен небольшой класс-обертка, который содержит оба значения как свойство.

Затем вы можете использовать серилизацию, это термин, описывающий способ преобразования объекта во что-то, что вы можете сохранить на диске.

Можно выбирать из множества форматов, но Json - хороший читаемый формат.Вы можете скачать пакет Nuget NewtonSoft.Json через менеджер пакетов Nuget.

public class StoreListView
{
    public void StoreToDisk(string path, List<ItemDataHolder> list)
    {

        string theListInJsonFormat = JsonConvert.SerializeObject(list);

        File.WriteAllText(path, theListInJsonFormat);
    }
}

public class ItemDataHolder
{
    public string SomeValuesYouWantToSave { get; set; }
    public bool IsChecked { get; set; }
}
0 голосов
/ 30 сентября 2019

Вы можете использовать оператор foreach для итерации по каждой строке в ListView, а затем оценивать состояние «Проверено».

private void Form1_Load(object sender, EventArgs e)
{
    listView.View = View.Details;
    listView.CheckBoxes = true;

    // Add columns
    listView.Columns.Add("Col1", 150, HorizontalAlignment.Left);
    listView.Columns.Add("Col2", 150, HorizontalAlignment.Left);

    for (int i = 1; i < 5; i++)
    {
        var item = new ListViewItem();
        item.Text = i.ToString();
        item.SubItems.Add((i * 10).ToString());
        listView.Items.Add(item);
    }
}

List<string> list = new List<string>();

private void button1_Click(object sender, EventArgs e)
{
    list.Clear();
    foreach (ListViewItem item in listView.Items)
    {
        if (item.Checked == true)
        {
            list.Add(item.Text + ", " + item.SubItems[1].Text);
        }
    }

    using (System.IO.StreamWriter file =
    new System.IO.StreamWriter(@"D:\test.txt"))
    {
        foreach (string line in list)
        {
            file.WriteLine(line);
        }
    }
}
0 голосов
/ 29 сентября 2019

Как то так?:

        List<string> delimeteredItems = new List<string>();
        foreach (ListViewItem lvi in listView1.CheckedItems)
        {
            string     item= String.Join("#", lvi.SubItems.Cast<ListViewItem.ListViewSubItem>().Select(si=>si.Text));
            delimeteredItems.Add(item);
        }
        System.IO.File.WriteAllLines(@"c:\temp\lines.txt", delimeteredItems);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...