Как сохранить / загрузить ListBox, в котором есть строковые и десятичные значения - PullRequest
1 голос
/ 26 июня 2011

Итак, у меня есть приложение Windows, над которым я работаю в Visual Studio, написанное на C #, и пользователь вводит имя видео в текстовое поле, а затем они оценивают такие вещи, как звук, качество видео, с помощью NumbericUpDown.Затем они добавляют кнопку расчета, которая заполняет метку рейтинга и добавляет ее в список.Ниже приведен весь код класса Videos, который получает все данные и затем помещает их в список.и рейтинг рассчитывается путем сложения всех значений, не думайте, что мне нужно показывать код для этого.

public class Videos
{
    // fields hold the data
    private string mName;
    private decimal mVideoScore;
    private decimal mSoundScore;
    private decimal mStoryScore;
    private string mRating;

    // Constructor
    public Videos String(string name, decimal videoScore, decimal soundScore, decimal storyScore, string rating)
    {
        mName = name;
        mVideoScore = videoScore;
        mSoundScore = soundScore;
        mStoryScore = storyScore;
        mRating = rating;
    }

    // Properties control access to the data
    public string Name
    {
        get { return mName; }
        set { mName = value;}
    }
    public decimal VideoScore
    {
        get { return mVideoScore; }
        set { mVideoScore = value;}
    }
    public decimal SoundScore
    {
        get { return mSoundScore; }
        set { mSoundScore = value; }
    }
    public decimal StoryScore
    {
        get { return mStoryScore; }
        set { mStoryScore = value; }
    }
    public string Rating
    {
        get { return mRating; }
        set { mRating = value; }
    }

    // Methods perform operations on the data
    public override string ToString()
    {
        return mName;
    }
}

Итак, я помещаю в список следующий код (когда пользователь нажимаеткнопка добавления)

private void AddToListButton_Click(object sender, EventArgs e)
{
    // Create a new Video Class
    Videos aVideo = new Video(NameTextBox.Text, VideoRating.Value, SoundRating.Value, StoryRating.Value, RatingDataLabel.Text);
    VideoList.Items.Add(aVideo);                
}

Таким образом, когда они нажимают кнопку «Добавить», они отображаются в качестве названия видео, но другие данные по-прежнему доступны для извлечения, у меня есть кнопка для извлечения и отображения выбранного видео.

Итак, я попробовал xml и сохранил в txt, но он просто добавляет название видео, а не другие данные.

Поэтому, пожалуйста, помогите мне перенести все данные, сохраненные в xml или txt илинезависимо от того, какой тип файла подходит, а затем, чтобы загрузить / открыть его, когда пользователь снова откроет приложение, он может загрузить ранее введенные данные.

1 Ответ

2 голосов
/ 26 июня 2011

Поскольку вы переопределяете ToString() для возврата возвращаемого mName.

Когда добавляете элемент в список, он использует этот метод для получения текста, представленного пользователю.

, если выЕсли вы хотите сериализовать данные в xml, то:

1 - добавьте атрибут [Serializable()] в класс Video.

[Serializable()] 
public class Video { ...}

2 - Реализуйте метод для сериализации и десериализации данных в и из xml:

public static void SerializeToXml(Video video, string outputXmlFilePath)
{
    if (video== null)
    {
        throw new ArgumentNullException("video");
    }

    if (outputXmlFilePath == null)
    {
        throw new ArgumentNullException("outputXmlFilePath");
    }

    System.Xml.Serialization.XmlSerializer xmlSerializer =
                new System.Xml.Serialization.XmlSerializer(video.GetType());

    using (StreamWriter streamWriter = new StreamWriter(outputXmlFilePath, false, System.Text.Encoding.UTF8))
    {
        xmlSerializer.Serialize(streamWriter, video);
    }
}

public static Video DeserializeFromXml(string xmlFilePath)
{
    if (xmlFilePath == null)
    {
        throw new ArgumentNullException("xmlFilePath");
    }

    if (!File.Exists(xmlFilePath))
    {
        throw new FileNotFoundException("file to deserialize from xml is not exists", xmlFilePath);
    }

    System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Video));

    Video video = null;

    using (StreamReader streamReader = new StreamReader(xmlFilePath, Encoding.UTF8))
    {
        deserializedObject = serializer.Deserialize(streamReader);
    }

    return video;
}

Чтобы сериализовать и десериализовать данные из файла: добавьте эти два метода SerializeToXml и DeserializeFromXml к вашему Video calss.2- Если вы хотите сохранить видео в файл, используйте Video.SerializeToXml(yourVideoObject, yourOutputFilePath);, а чтобы вернуть видео из файла, используйте Video myVideo = Video.DeserializeFromXmlFile(yourVideoFilePath);

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