繁体   English   中英

C#保存并重新填充数组中的数据

[英]C# Save and repopulate data from array

我正在开发一个C#程序,该程序将学生姓名,学生编号,单元编号,单元名称,分数和出勤率存储在一个数组中。 所有数据都显示在ListView中。 如何保存数组中的数据,然后使用“加载”按钮重新填充数组? 先感谢您。

public partial class Main : Form
{
    public Main()
    {
        InitializeComponent();

        //ListVIEW Properties
        listView.View = View.Details;
        listView.FullRowSelect = true;
    }

    private void insert(string StudentNumber, string StudentName, string UnitNumber, string UnitName, string Mark, string combobox)
    {
        // Array
        string[] row = { StudentNumber, StudentName, UnitNumber, UnitName, Mark, combobox };

        ListViewItem item = new ListViewItem(row);
        listView.Items.Add(item);
    }

    private void update()
    {
        //Update
        listView.SelectedItems[0].SubItems[0].Text = TXTStudentNumber.Text;
        listView.SelectedItems[0].SubItems[1].Text = TXTStudentName.Text;
        listView.SelectedItems[0].SubItems[2].Text = TXTUnitNumber.Text;
        listView.SelectedItems[0].SubItems[3].Text = TXTUnitName.Text;
        listView.SelectedItems[0].SubItems[4].Text = TXTMark.Text;
        listView.SelectedItems[0].SubItems[5].Text = comboBox1.Text;

        TXTStudentNumber.Text = "";
        TXTStudentName.Text = "";
        TXTUnitNumber.Text = "";
        TXTUnitName.Text = "";
        TXTMark.Text = "";
        comboBox1.Text = "";            
    }

    private void delete()
    {
        if (MessageBox.Show("Are you sure?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
        {
            listView.Items.RemoveAt(listView.SelectedIndices[0]);
        }            
        TXTStudentNumber.Text = "";
        TXTStudentName.Text = "";
        TXTUnitNumber.Text = "";
        TXTUnitName.Text = "";
        TXTMark.Text = "";
        comboBox1.Text = "";
    }

    private void btnInsert_Click(object sender, EventArgs e)
    {
        //Insert
        insert(TXTStudentNumber.Text, TXTStudentName.Text, TXTUnitNumber.Text, TXTUnitName.Text, TXTMark.Text, comboBox1.Text);

        // Clear All textBox after Pressing Button
        TXTStudentNumber.Text = "";
        TXTStudentName.Text = "";
        TXTUnitNumber.Text = "";
        TXTUnitName.Text = "";
        TXTMark.Text = "";
        comboBox1.Text = "";
    }

    //Update Button
    private void btnUpdate_Click(object sender, EventArgs e)
    {
        update();
    }

    //Delete Button
    private void btnDelete_Click(object sender, EventArgs e)
    {
        delete();
    }

    //Clear Button
    private void btnClear_Click(object sender, EventArgs e)
    {
        TXTStudentNumber.Text = "";
        TXTStudentName.Text = "";
        TXTUnitNumber.Text = "";
        TXTUnitName.Text = "";
        TXTMark.Text = "";
        comboBox1.Text = "";
    }

    // ListView
    private void listView1_MouseClick(object sender, MouseEventArgs e)
    {
        TXTStudentNumber.Text = listView.SelectedItems[0].SubItems[0].Text;
        TXTStudentName.Text = listView.SelectedItems[0].SubItems[1].Text;
        TXTUnitNumber.Text = listView.SelectedItems[0].SubItems[2].Text;
        TXTUnitName.Text = listView.SelectedItems[0].SubItems[3].Text;
        TXTMark.Text = listView.SelectedItems[0].SubItems[4].Text;
        comboBox1.Text = listView.SelectedItems[0].SubItems[5].Text;
    } 

数组不适用于这种情况。 而是使用列表。

private List<Student> students = new List<Student>();
private void insert(string StudentNumber, string StudentName, string UnitNumber, string UnitName, string Mark, string combobox)
{
   Student s = new Student
   {
     StudentNumber =StudentNumber,
     StudentName =StudentName,
     UnitNumber =UnitNumber
     UnitName =UnitName,
     Mark = Mark
     Combobox = combobox
   };
  students.Add(s);
}


public class Student
{
  public string StudentNumber{get; set;}
  public string StudentName {get; set;}
  public string UnitNumber {get; set;}
  public string UnitName {get; set;}
  public string Mark {get; set;}
  public string Combobox {get;set;}
}

请按照以下步骤

  1. 添加扩展方法以将对象与xml相互转换

ExtensionMethods类

public static class ExtensionMethods
{
    /// <summary>
    /// Converts given class to XML using xml serialization
    /// </summary>
    /// <typeparam name="T">Type of Class</typeparam>
    /// <param name="classObject">Class to be serialized</param>
    /// <returns>Xml string</returns>
    public static string ToXML<T>(this T classObject) where T : class
    {
        XmlSerializer xmls = new XmlSerializer(typeof(T));
        using (MemoryStream ms = new MemoryStream())
        {
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Encoding = new UTF8Encoding(false);
            settings.Indent = true;
            settings.IndentChars = "\t";
            settings.NewLineChars = Environment.NewLine;
            settings.OmitXmlDeclaration = true;
            settings.ConformanceLevel = ConformanceLevel.Document;
            using (XmlWriter writer = XmlTextWriter.Create(ms, settings))
            {
                xmls.Serialize(writer, classObject);
            }

            string xml = Encoding.UTF8.GetString(ms.ToArray());
            return xml;
        }
    }

    /// <summary>
    /// Converts given XML string to class of type T
    /// </summary>
    /// <typeparam name="T">Type to be converted</typeparam>
    /// <param name="XmlData">xml string</param>
    /// <returns>class of Type T</returns>
    public static T ToClass<T>(this string XmlData)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(T));
        T newClass;
        using (XmlTextReader reader = new XmlTextReader(new StringReader(XmlData)))
        {
            //reader.Namespaces = false;
            newClass = (T)serializer.Deserialize(reader);
        }
        return newClass;
    }
}
  1. 创建一个课程来保存学生信息

学生班

public class Student
{
  public string StudentNumber{get; set;}
  public string StudentName {get; set;}
  public string UnitNumber {get; set;}
  public string UnitName {get; set;}
  public string Mark {get; set;}
  public string Combobox {get;set;}
}
  1. 在表单加载中检查文件是否存在

表格加载

    //declare global variable for student list and filepath
    List<Student> students = new List<Student>();
    string FilePath = AppDomain.CurrentDomain.BaseDirectory + "\\" + Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.FriendlyName) + ".xml";
    private void Form1_Load(object sender, EventArgs e)
      {

            string XmlData = string.Empty;
            if (File.Exists(FilePath))
            {
                using (StreamReader sr = new StreamReader(FilePath))
                {
                    XmlData = sr.ReadToEnd(); 
                }
                students = XmlData.ToClass<List<Student>>();
            }      
      }
  1. 在插入,更新和删除操作中,将xml文件保存到文件系统

保存XML

string XmlData = students.ToXML();
File.WriteAllText(FilePath, XmlData);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM