上一篇中讲到XML基本的结构,还有增删改查的方法,这一篇中我们就来利用XML来完成一个简单的订单系统,主要是实现一个简单学生名单的增删改查,如果想要应用到实际的环境中建议考虑数据量的问题,如果数据量大使用XML的话会比较耗时,使用SQL的性能会好一些
这里使用WinForm窗体程序,大致界面如下:
- 创建了两个窗体,一个主窗体用来显示名单数据,当添加或者编辑操作时则使用另外一个窗体。
- 主窗体中放置四个按钮,以及一个DataGridView控件,另外一个添加、编辑窗体,则按照相应的字段放置好控件。
- 给各控件命好名。
XML文档的格式如下:
1 <?xml version="1.0" encoding="utf-8"?> 2 3 <学生名单> 4 5 <学生 Name="李四一" class="0102"> 6 7 <性别>男</性别> 8 9 <生日>1999年1月2日</生日> 10 11 <学号>20170</学号> 12 13 </学生> 14 15 <学生 Name="张三三" class="高一"> 16 17 <性别>男</性别> 18 19 <学号>0102</学号> 20 21 <生日>2017年6月18日</生日> 22 23 </学生> 24 25 </学生名单>
学生名单为根元素,班级为根元素中的子元素,班级中又嵌套<学生>标记,了解了数据是以怎么的结构储存那么下面就继续。
数据在DataGridView中的显示
将XML中的数据,顺序显示在DataGridView控件中
1 //创建一个datatable存储XML中的数据 2 3 DataTable dt = new DataTable(); 4 5 //指定每一列的列名,和数据类型 6 7 dt.Columns.Add("Id", (typeof(System.String))); 8 9 dt.Columns.Add("班级", (typeof(System.String))); 10 11 dt.Columns.Add("姓名", (typeof(System.String))); 12 13 dt.Columns.Add("学号", (typeof(System.String))); 14 15 dt.Columns.Add("生日", (typeof(System.String))); 16 17 dt.Columns.Add("性别", (typeof(System.String))); 18 19 //创建一个DataRow对象 20 21 DataRow dr = dt.NewRow(); 22 23 24 25 XmlDocument doc = new XmlDocument(); 26 27 //为相对路径表示前二级的目录 28 29 doc.Load(@"..//..//Students.xml"); 30 31 XmlElement root = doc.DocumentElement; 32 33 XmlNodeList studentNodes = root.GetElementsByTagName("学生"); 34 35 //使用foreach遍历集合元素 36 37 foreach(var item in studentNodes) 38 39 { 40 41 dr["Id"] = ((XmlElement)item).GetAttribute("Id"); 42 43 dr["班级"] = ((XmlElement)item).GetAttribute("Class"); 44 45 dr["姓名"] = ((XmlElement)item).GetAttribute("Name"); 46 47 dr["学号"] = ((XmlElement)item).GetElementsByTagName("学号")[0].InnerText; 48 49 dr["生日"] = ((XmlElement)item).GetElementsByTagName("生日")[0].InnerText; 50 51 dr["性别"] = ((XmlElement)item).GetElementsByTagName("性别")[0].InnerText; 52 53 dt.Rows.Add(dr); 54 55 } 56 57 //将DataTable绑定到DataGridView控件 58 59 dgvStudents.DataSource = dt;
增加记录
因为添加学生和编辑学生都需要在同一个窗体,那么在打开添加或编辑窗体时使用构造函数来传值,并判断是编辑还是添加。
1 添加编辑窗体代码: 2 3 public partial class FrmStudentAddandEdit : Form 4 5 { 6 7 //全局变量接受传值 8 9 bool IsAdd; 10 11 string Name; 12 13 //使用构造函数进行传值 true为增加,false为编辑 14 15 public FrmStudentAddandEdit(bool isAdd, string name) 16 17 { 18 19 this.IsAdd = isAdd; 20 21 this.Name = name; 22 23 InitializeComponent(); 24 25 } 26 27 } 28 29 30 31 主窗体添加按钮单击事件代码: 32 33 private void btnAdd_Click(object sender, EventArgs e) 34 35 { 36 37 //在创建窗体时传值 38 39 FrmStudentAddandEdit form = new FrmStudentAddandEdit(true); 40 41 form.ShowDialog(); 42 43 } 44 45 46 47 新增记录代码: 48 49 private void btnOK_Click(object sender, EventArg