C # - сохранить содержимое ListView в виде XML (с несколькими столбцами) и читать на Form_Load - PullRequest
0 голосов
/ 22 октября 2009

Мое приложение имеет элемент управления ListView, к которому добавлены данные в несколько столбцов и строк. Когда форма закрывается (вызывая событие Form_Closing), содержимое сохраняется в файл XML. Затем при следующем запуске XML-документ считывается, а его содержимое отображается в элементе управления ListView. По какой-то причине он загружает только первый столбец и не сохраняет все данные. Я новичок в использовании XML для сохранения данных. Любая помощь будет оценена.

Это то, что я имею до сих пор, я уверен, что есть много ошибок:

    private void Form1_Load(object sender, EventArgs e)
    {
        System.Xml.XmlDocument loadDoc = new System.Xml.XmlDocument();
        loadDoc.Load(Application.StartupPath + "\\Accounts.xml");

        foreach (System.Xml.XmlNode emailNode in loadDoc.SelectNodes("/Accounts/Item"))
        {
            AccountList.Items.Add(emailNode.Attributes["email"].InnerText);;
        }

        foreach (System.Xml.XmlNode passwordNode in loadDoc.SelectNodes("/Accounts/Item"))
        {
            AccountList.Items.Add(passwordNode.Attributes["password"].InnerText); ;
        }

        foreach (System.Xml.XmlNode statusNode in loadDoc.SelectNodes("/Accounts/Item"))
        {
            AccountList.Items.Add(statusNode.Attributes["status"].InnerText); ;
        }
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(Application.StartupPath + "\\Accounts.xml", null);

        writer.WriteStartElement("Accounts");
        for (int i =0; i < AccountList.Items.Count; i++)
        {
            writer.WriteStartElement("Item");
            writer.WriteAttributeString("email", AccountList.Items[i].Text);
            writer.WriteAttributeString("password", AccountList.Items[i].Text);
            writer.WriteAttributeString("status", AccountList.Items[i].Text);
            writer.WriteEndElement();
        }

        writer.WriteEndElement();
        writer.Close();
    }

1 Ответ

2 голосов
/ 22 октября 2009

Ваша первая проблема в том, что в FormClosing вы записываете те же данные:

        writer.WriteAttributeString("email", **AccountList.Items[i].Text**);
        writer.WriteAttributeString("password", **AccountList.Items[i].Text**);
        writer.WriteAttributeString("status", **AccountList.Items[i].Text**);

(Извините, жирным шрифтом не может. Обратите внимание, что элементы [i]. Текст такой же.)

Вы захотите использовать что-то вроде AccountList.Items [i] .SubItems [ 0 ]. Text. Замените 0 на 1, 2 и т. Д. Для индексов столбцов. См. http://msdn.microsoft.com/en-us/library/system.windows.forms.listviewitem.listviewsubitem.aspx для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...