Каков наилучший способ сохранить мой объект "ученик" и загрузить его в поле со списком? - PullRequest
0 голосов
/ 28 февраля 2020

Я создал объект, который называется Student. Идея моей Программы состоит в том, чтобы создать несколько учеников и сохранить их в .txt файле и загрузить их. (Я бы хотел, чтобы они отображались в CombBbox, когда я открывал программу.)

Я использую кнопку btnAddStudent, чтобы сохранить новых учеников и отобразить их в ComboBox, используя BindingList<Student> StudentCollection.

В настоящее время я пытаюсь найти способ сохранить / загрузить данные ComboBox, потому что я знаю только, как сохранить простой текст в .txt файлах.

Это код, который я использую.

public partial class Form1 : Form
{
    string FilePath = (@"C:\Users\hholke\Desktop\sickprogramming\Projekt3\StudentList");
    public Student ID01;
    BindingList<Student> StudentCollection = new BindingList<Student>();

    public Form1()
    {
        InitializeComponent();
    }

    #region Textbox
    private void txtFirstName_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsLetter(e.KeyChar) && !char.IsControl(e.KeyChar) && !char.IsWhiteSpace(e.KeyChar))
        {
            e.Handled = true;
            MessageBox.Show("Nur Buchstaben erlaubt");
        }
    }
    private void txtLastName_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsLetter(e.KeyChar) && !char.IsControl(e.KeyChar) && !char.IsWhiteSpace(e.KeyChar))
        {
            e.Handled = true;
            MessageBox.Show("Nur Buchstaben erlaubt");
        }
    }
    #endregion

    #region Buttons
    private void btnLaden_Click(object sender, EventArgs e)
    {
        Student StudentLoad = (Student)cbxStudentIDs.SelectedItem;

        txtStudentID.Text = StudentLoad.ID;
        txtFirstName.Text = StudentLoad.FirstName;
        txtLastName.Text = StudentLoad.LastName;
        txtSchoolClass.Text = StudentLoad.Schoolclass;
        nudAge.Value = StudentLoad.Age;
        nudHeight.Value = StudentLoad.Height;
        cbxGender.Text = StudentLoad.Gender;
    }

    private void btnAddStudent_Click(object sender, EventArgs e)
    {
        Student StudentSave = new Student
        {
            ID = txtStudentID.Text,
            FirstName = txtFirstName.Text,
            LastName = txtLastName.Text,
            Age = nudAge.Value,
            Height = nudHeight.Value,
            Schoolclass = txtSchoolClass.Text,
            Gender = cbxGender.Text,
        };
        cbxStudentIDs.DataSource = StudentCollection;
        cbxStudentIDs.DisplayMember = "ID";
        StudentCollection.Add(StudentSave);
    }
    #endregion
    public class Student
    {
        //Eigenschaften
        public string ID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public decimal Age { get; set; }
        public decimal Height { get; set; }
        public string Schoolclass { get; set; }
        public string Gender { get; set; }
    }
}

1 Ответ

1 голос
/ 28 февраля 2020

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

Преобразование объекта в строку JSON легко. Сначала я предпочитаю установить Newtonsoft. Json через консоль диспетчера пакетов Nuget:

Install-Package Newtonsoft.Json -Version 12.0.3

и использовать его:

using Newtonsoft.Json;

Затем вы можете сериализовать весь список студентов и сохранить его. в файл:

var studentCollectionString = JsonConvert.SerializeObject(StudentCollection);
File.WriteAllText(/*FILE PATH*/, studentCollectionString);

Если вы хотите загрузить студентов, вам просто нужно прочитать весь текст из файла и десериализовать его так:

var studentCollectionString = File.ReadAllText(/*FILE PATH*/);
StudentCollection = JsonConvert.DeserializeObject<BindingList<Student>>(studentCollectionString);

Надеюсь, это помогло .

...