[英]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;}
}
请按照以下步骤
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;
}
}
学生班
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;}
}
表格加载
//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>>();
}
}
保存XML
string XmlData = students.ToXML();
File.WriteAllText(FilePath, XmlData);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.