ASP.NET(C#)中通过GRIDVIEW控件对XML数据进行管理
【摘要】:由于XML良好的可读性、高度的可拓展性以及多平台的兼容性使得其在轻量级数据存储方面拥有不可比拟的优势,而GridView控件的高集成度使得应用操作简易。本论文提出一种通过GridView控件对Xml数据管理的基本方法并就此方法作为例子详细的讲解了命令的根本逻辑和含义以及使用范围。
【关键词】:GridView Xml 数据管理
一、前言
在ASP.NET架构中,GridView控件通常是与SQL数据进行绑定以实现显示数据功能,这种实现方法操作简易,容错性强,使用者不需要掌握太多的数据结构知识。但是在教学中为了能更好的让学习者理解GridView控件从数据源中读取数据的过程和数据存储的结构,我们使用Xml表作为数据源,其显示方式更加直观,严苛的编辑标准对于初学者的逻辑理解来讲也更加友好。
本论文旨在提出一种逻辑较为简单易懂的命令来实现ASP.NET中通过GridView控件来对Xml表内数据进行删改的功能,命令行以易读性为第一标准,使学习者在了解根本数据传递方法之后,能够熟练掌握其命令逻辑并在不同的环境下得以灵活运用。
二、核心代码分析
1、Xml表结构
2、显示数据
由于此段代码在后续会被多次用到,故定义子函数:
void MyDataBind()
{ DataSet ds = newDataSet();//创建一个dataset缓存区命名为ds
ds.ReadXml(Server.MapPath("XMLFile1.xml"));//读取外部Xml表数据加载至ds,此时Xml文件应与当前页面文件处于同一文件夹同一层次
if (ds.Tables.Count> 0)
{ this.GridView1.DataSource= ds.Tables[0].DefaultView;//将ds中第一个表以默认方式作为GridView控件的数据源
this.GridView1.DataBind();} }//绑定数据源
3、删除数据
protectedvoidGridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{ XmlDocument xmlDoc = newXmlDocument();//创建一个XmlDocument类命名为xmlDoc
xmlDoc.Load(Server.MapPath("XMLFile1.xml"));//读取Xml表数据加载至xmlDoc
XmlNode xmlNode =xmlDoc.SelectSingleNode5("//basic[e5='" +
GridView1.Rows[e.RowIndex].Cells[7].Text+ "']");//在xmlDoc中查询元素e5的值等于当前选定行第8列的值的节点并命名为xmlNode
xmlNode.ParentNode.RemoveChild(xmlNode);//移除xmlNode节点
xmlDoc.Save(Server.MapPath("XMLFile1.xml"));//将现存的xmlDoc中的数据重载至外部Xml表中并保存
MyDataBind(); }//显示当前外部Xml表数据
4、编辑数据
protectedvoidGridView1_RowEditing(object sender, GridViewEditEventArgs e)
{ GridView1.EditIndex= e.NewEditIndex;//获取当前选定行的索引并进行编辑
MyDataBind(); }
5、更新数据
protectedvoidGridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{ TextBox a0, a1, a2, a3, a4,a5;//创建多个TextBox类并分别命名
a0 =(TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[0];
a1 =(TextBox)GridView1.Rows[e.RowIndex].Cells[3].Controls[0];
a2 =(TextBox)GridView1.Rows[e.RowIndex].Cells[4].Controls[0];
a3 =(TextBox)GridView1.Rows[e.RowIndex].Cells[5].Controls[0];
a4 =(TextBox)GridView1.Rows[e.RowIndex].Cells[6].Controls[0];
a5 =(TextBox)GridView1.Rows[e.RowIndex].Cells[7].Controls[0];
//创建TextBox类的个数应和外部xml表中总元素的个数保持一致,由于使用了GridView控件内置的编辑和删除按钮,在编辑时GridView显示表的前两列被更新和取消按钮占用,所以在读取TextBox数据时应后移两列,Cells[]的下标从2开始。由于每次选定编辑的内容有且只有一行,故Controls[]的下标始终为0。
XmlDocument xmlDoc = newXmlDocument();
xmlDoc.Load(Server.MapPath("XMLFile1.xml"));
XmlNode MyXmlNode =xmlDoc.SelectSingleNode("//basic[e5='" + a5.Text + "']");
MyXmlNode.ChildNodes[0].InnerText= a0.Text;
MyXmlNode.ChildNodes[1].InnerText= a1.Text;
MyXmlNode.ChildNodes[2].InnerText= a2.Text;
MyXmlNode.ChildNodes[3].InnerText= a3.Text;
MyXmlNode.ChildNodes[4].InnerText= a4.Text;
//InnerText属性为继承MyXmlNode并设置其所有子节点的串联值,即使新建的节点拥有和原节点相同的元素及排序。将各个TextBox内的数据载入对应的子节点中。
xmlDoc.Save(Server.MapPath("XMLFile1.xml"));
GridView1.EditIndex= -1;//取消编辑
MyDataBind(); }
三、总结
使用Xml表作为数据源时,由于与前台程序之间存在一个DataSet缓存区,数据先行载入后可以断开与数据源的连接,而在DataSet中数据的存储结构为同一节点里的所有元素储存在同一张DataTable中,其顺序和Xml表中节点的排列顺序一致。这些特性使得用GridView控件管理Xml表的规范数据时只用短时占用Xml表资源,大部分操作都在页面程序上进行,大大提升了运行速率。
参考文献:
[1] 严蔚敏 吴伟民编著,《 数据结构》(C语言版) 清华大学出版社,2010
[2] 【美】Elliotte Rusty Harol著,《XML实用大全》 中国水利水电出版社,2000