我想从XML文件加载数据并显示在列表框中? [英] I want to load the data from XML file and show in the listbox?
问题描述
我有三个课程:
第一个是人物:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public Person()
{
}
public override string ToString()
{
return FirstName + " " +LastName + "\t" +Email;
}
}
其次是:
public class Student:Person
{
public Student()
{
}
public double AssessmentGrade { get; set; }
public double AssignmentGrade { get; set; }
public override string ToString()
{
return base.ToString() + "," +AssessmentGrade + "," + AssignmentGrade;
}
}
第三是:
public class Teacher:Person
{
public int RoomNumber
{
get;
set;
}
public override string ToString()
{
return base.ToString() + "," + RoomNumber;
}
}
我还有一个类,我只是调用数据from PeronDB(Class)
I have One more class where i just call the data from PeronDB (Class)
public class Persons
{
private List<Person> persons = null;
public void Fill()
{
persons = PersonDB.GetPersons();
}
}
InPersonDB类如果其Student节点读取
InPersonDB class I am doing if its Student node then read the data if its Teacher nodes then also reads the data and If it Person it also reads the data.
public class PersonDB
{
private const string path = @"..\..\Persons.xml";
public static List<Person> GetPersons()
{
List<Person> persons = new List<Person>();
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;
XmlReader xmlIn = XmlReader.Create(path, settings);
if (xmlIn.ReadToDescendant("Student"))
{
do
{
Person person = new Person();
Student student = (Student)person;
xmlIn.ReadStartElement("Student");
student.FirstName = xmlIn.ReadElementContentAsString();
student.LastName = xmlIn.ReadElementContentAsString();
student.Email = xmlIn.ReadElementContentAsString();
student.AssessmentGrade = xmlIn.ReadElementContentAsInt();
student.AssignmentGrade = xmlIn.ReadElementContentAsInt();
persons.Add(student);
} while (xmlIn.ReadToNextSibling("Student"));
}
else if (xmlIn.ReadToDescendant("Teacher"))
{
do
{
Person person = new Person();
Teacher teacher = (Teacher)person;
xmlIn.ReadStartElement("Teacher");
teacher.FirstName = xmlIn.ReadElementContentAsString();
teacher.LastName = xmlIn.ReadElementContentAsString();
teacher.Email = xmlIn.ReadElementContentAsString();
teacher.RoomNumber = xmlIn.ReadElementContentAsInt();
persons.Add(teacher);
} while (xmlIn.ReadToNextSibling("Teacher"));
}
if (xmlIn.ReadToDescendant("Person"))
{
do
{
Person person = new Person();
xmlIn.ReadStartElement("Person");
person.FirstName = xmlIn.ReadElementContentAsString();
person.LastName = xmlIn.ReadElementContentAsString();
person.Email = xmlIn.ReadElementContentAsString();
persons.Add(person);
} while (xmlIn.ReadToNextSibling("Person"));
}
xmlIn.Close();
return persons;
}
}
p>
And in the Form Load i am doing:
Persons personList = null;
private void FillPersonlstBox()
{
Person p;
listBox1.Items.Clear();
for (int i = 0; i < personList.Count; i++)
{
p = personList[i];
listBox1.Items.Add(p.ToString());
}
}
private void Load_Click(object sender, EventArgs e)
{
personList.Changed += new Persons.ChangeHandler(HandleChange);
personList.Fill();
FillPersonlstBox();
}
它显示在** personList.Changed + = new Persons.ChangeHandler HandleChange); **这行错误。它显示对象引用未设置为对象的实例。这个错误。
请帮助我如何解决它?
It show me in ** personList.Changed += new Persons.ChangeHandler(HandleChange); ** this line error.It shows me "Object reference not set to an instance of an object." this error. Please guys help me How to fix it?
推荐答案
在某些时候你必须实例化 personList
。
At some point you've got to instantiate personList
.
在您的代码中,您无法处理已更改
event on personList因为它仍然为null。
In your code, you can't handle the Changed
event on personList because it is still null.
因此,而不是
Persons personList = null;
也许尝试
Persons personList = new Persons();
这篇关于我想从XML文件加载数据并显示在列表框中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!