XML文档的格式如下:

<?xml version="1.0" encoding="utf-8"?>

<学生名单>

<学生 Name="李四一" class="0102">

<性别>男</性别>

<生日>1999年1月2日</生日>

<学号>20170</学号>

</学生>

<学生 Name="张三三"  class="高一">

<性别>男</性别>

<学号>0102</学号>

<生日>2017年6月18日</生日>

</学生>

</学生名单>

数据在DateGridView中的显示

将XML中的数据,顺序显示在DataGridView控件中

//创建一个datatable存储XML中的数据

DataTable dt=new DataTable();

//指定每一列的列名,和数据类型

dt.Columns.Add("Id",(typeof(System.String)));

dt.Columns.Add("班级",(typeof(System.String)));

dt.Columns.Add("姓名",(typeof(System.Strng)));

dt.Columns.Add("学号".(typeof(Sytem.String)));

dt.Columns.Add("生日".(typeof(System.String)));

dt.Columns.Add("性别".(typeof(System.String)));

//创建一个DataRow对象

DataRow dr=dt.NewRow();

XmlDocument doc=new XmlDocument();

//为相对路径表示前二级的目录

doc.Load(@"..//..//Students.xml");

XmlElement root=doc.DocumentElenment;

XmlNodeList studentNodes=root.GetElementsByTagName("学生");

//使用foreach遍历集合元素

foreach(var item in studentNodes)

{

dr["Id"]=((XmlElement)item).GetAttribute("Id");

dr["班级"]=((XmlElement)item).GetAttribute("Class");

dr["姓名"]=((XmlElement)item).GetAttribute("Name");

dr["学号"]=((XmlElement)item).GetElementsByTagName("学号")[0].InnerText;

dr["生日"]=((XmlElement)item).GetElementsByTagName("生日")[0].InnerText;

dr["性别"]=((XmlElement)item).GetElementsByTagName("性别")[0].InnerText;

dt.Rows.Add(dr);

}

//将DataTable绑定到DataGridView控件

dgvStudents.DataSource=dt;

增加记录

因为添加学生和编辑学生都需要在同一个窗体,那么在打开添加或编辑窗体时使用构造函数来传值,并判断是编辑还是添加

添加编辑窗体代码:

public partial class FrmStudentAddandEdit:Form

{

//全局变量接受传值

bool IsAdd;

string Name;

//使用构造函数进行传值true为增加,FALSE为编辑

public FrmStudentAddandEdit(bool isAdd,string name)

{

this.IsAdd=isAdd;

this.Name=name;

InitializeComponent();

}

}

主窗体添加按钮单击事件代码:

private void btnAdd_Click(object sender,EventArgs e)

{

//在创建窗体时传值

FrmStudentAddandEdit form=new FrmStudentAddandEdit(true)'

form.ShowDialog();

}

新增记录代码:

private void btnOK_Click(object sender,EventArgs e)

{

XmlDocument doc=new XmlDocument();

doc.Load(@"..//..//Students.xml");

XmlElement root=doc.DocumentElement;

//添加《学生》子节点

XmlElement Shutdent=doc.CreateElement("学生");

//设置Name属性和Class属性

Shutdent.SetAttribute("Name",txtName.Text.Trim());

Shutdent.SetAttribute("Class",txtClass.Text.Trim());

//创建子节点

XmlElement eSex=doc.CreateElement("性别");

XmlText tSex=doc.CreateTextNode(cmbSex.Text.Trim());

//子节点添加内容

eSex.AppendChild(tSex);

//将子节点添加学生标记

Shutdent.AppendChild(eSex);

XmlElement eNum=doc.CreateElement("学号");

XmlText tNum=doc.CreateTextNode(txtNumber.Text.Trim());

eNum.AppendChild(tNum);

Shutdent.AppendChild(eNum);

XmlElement eBirthday=doc.CreateElement("生日");

XmlText tBirthday=doc.CreateTextNode(dtpBirthday.Text.Trim('-'));

eBirthday.AppendChild(tBirthday);

Shutdent.AppendChild(eBirthday);

//将学生标记添加进根结点

root.AppendChild(Shutdent);

doc.Save(@"..//..//Students.xml");

MessageBox.Show("添加成功!");

this.Close();

}

编辑记录

由于编辑需要查找到这条记录然后复制到控件中显示,那么在我们启动“添加或编辑窗体”时需要判断当前是添加状态还是编辑状态,并将表格选择行的姓名字段传给构造函数,通过这个姓名字段查找相应的值,然后筛选出来再给控件赋值

主窗口编辑按钮单击事件:

private void btnEdit_Click(object sender,EventArgs e)

{

//获取当前选择表格的行索引

int dgvIndex=dgvStudents.CurrentRow.Index;

//根据行索引获取单元格的值

string name=dgvStudents.Rows[dgvIndex].Cells["姓名"].Value.ToString();

FrmStudentAddandEdit form=new FrmStudentAddandEdit(false,name);

form.ShowDialog();

}

窗体启动事件进行判断是添加还是编辑:

private void FrmStudentAddandEdit_Load(object sender,EventArgs e)

{

if(IsAdd){

this.Text="添加学生”;

}

else

{

this.Text="编辑学生名单";

XmlDocument doc=new XmlDocument();

doc.Load(@"..//..//Students.xml");

XmlElement root=doc.DocumentElement;

//筛选出符合条件的标记

XmlElement selectEle=(XmlElement)root.SelectSingleNode("/学生名单/学生[@Name='"+Name+"']");

//筛选出符合条件并给控件赋值

txtName.Text=selectEle.GetAttribute("Name");

txtClass.Text=selectEle.GetAttribute("Class");

txtNumber.Tex=selectEle.GetElementsByTagName("学号“)[0].InnerText;

dtpBirthday.Text=selectEle.GetElemensByTagName("生日")[0].InnerTextl;

cmbSex.Text=selectEle.GetElementsByTagName("性别")[0].InnerText;

}

}

同样在编辑好内容后,单击确定按钮后判断当前是添加状态还是编辑状态:

private void btnOK_Click(object sender,EventArgs e)

{

if(IsAdd)

{

//添加记录代码

}

else

{

this.Text="编辑学生名单";

XmlDocument doc=new XmlDocument();

doc.Load(@"..//..//Students.xml");

XmlElement root=doc.DocumentElement;

//筛选出符合条件的标记

XmlElement selectEle=(XmlElement)root.SelectSingleNode("/学生名单/学生[@Name='"+Name+"']");

selectEle.SetAttribute("Name",txtName.Text.Trim());

selectEle.SetAttribute("Class",txtClass.Text.Trim());

//筛选出的对象赋给XMLElement对象

XmlElement eSex=(XmlElement)selectEle.GetElementsByTagName("性别")[0];

eSex.InnerText=cmbSex.Text;

XmlElement eNumber=(XmlElement)selectEle.GetElementsByTagName("学号")[0];

eNumber.InnerText=txtNumber.Text;

XmlElement eBirth=(XmlElement)selectEle.GetElementsByTagName("生日")[0];

eBirth.InnerText=dtpBirthday.Text;

doc.Save(@"..//..//Students.xml");

MessageBox.Show("修改成功!");

//这一步很重要一定要关闭窗口不然再次修改会出现不可预料的BUG

this.Close();

}

}

删除记录

也是一样的逻辑获取当前选择表格的姓名字段,然后按照相关姓名进行删除,如果姓名不是唯一字段,那么可以使用ID,每次添加一次记录的时候最大ID+1

//获取当前选择表格的行索引及姓名

int dgvIndex=dgvStudents.CurrentRow.Index;

string name=dgvStudents.Rows[dgvIndex].Cells["姓名"].Value.ToString();

//筛选出符合条件的标记

XmlElement selectEle=(XmlElement)root.SelectSingleNode("/学生名单/学生[@Name='"+Name+"']";

//删除指定子元素

root.RemoveChild(selectEle);

doc.Save("...");

最新文章

  1. 通过iMindMap改善你的工作方式的教程
  2. grep 命令详解
  3. Xcode7 Cocoapods 安装或更新出现错误
  4. linux sed 添加 删除 一行
  5. 自动挂载文件/etc/fstab功能详解
  6. 哭瞎!360云盘将关停,你的几十T照片和文件该怎么办
  7. IT公司100题-13-求链表中倒数第k个结点
  8. ETL Pentaho Data Integration (Kettle) 插入/更新 问题 etl
  9. php字符串函数(1)
  10. Qt直接使用OpenSSL里的函数
  11. [Android学习笔记]Unable to execute dex Multiple dex files define:xxxx 问题
  12. 第四章 android 命名规范和编码规范
  13. hudson--ant编写记录
  14. spring加载过程中jar包加载不了,解决方法
  15. XBanner的简单使用轮播
  16. react render
  17. laravel command调用方法命令
  18. Python爬虫——selenium模块
  19. [luogu4551][POJ3764]最长异或路径
  20. hdu3311

热门文章

  1. .config 中特殊字符的处理
  2. Gym 100989E 字符串
  3. Codevs 2460 == BZOJ 1036 树的统计
  4. [论文]A Link-Based Approach to the Cluster Ensemble Problem
  5. Hibernate的merge与update方法的区别
  6. Java EE学习记录(一)
  7. hdu 3440(差分约束好题)
  8. ansible 通过网络下载和上传文件
  9. SpringBoot整合MyBatisPlus配置动态数据源
  10. 关于js延迟加载(异步操作)的方式