【C#】XML读写与dataGridView的使用
来源:互联网 发布:淘宝客怎么建站2016 编辑:程序博客网 时间:2024/06/07 17:17
C#直接是自有包可以轻松对XML完成读写。下面用一个程序展示C#如何对XML进行读写。如下图所示,有一个窗体程序,可以读写XML。
下面是写入XML功能的展示。
下面是读XML的展示,并且修改之后再写入:
具体制作步骤如下:
一、场景布置
如图。主要是在Form中布置了2个Button与1个dataGridView,一改《【C#】ListView的使用,对Access数据库的增删改查》(点击打开链接)中用Listview的做法,毕竟重点不在这里。同时dataGridView可以允许用户直接通过Delete键删除一行,点那个*增加一行,比较省事。主要是讲解如何做XML的读写的。对C#窗体的不懂的人可以参考《【C#】简单窗体程序,判断是否闰年,禁止窗体调整大小,关闭窗体前的判断 》(点击打开链接)。
二、脚本编写
这里是最主要的,关键是对两个Button的点击事件进行编写,代码如下:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Xml;//XML处理类专属的头文件namespace xmlRW{ public partial class Form1 : Form { string xml_FilePath = "";//用来记录当前打开文件的路径的 public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1 = new System.Windows.Forms.OpenFileDialog();//一个打开文件的对话框 openFileDialog1.Filter = "xml文件(*.xml)|*.xml";//设置允许打开的扩展名 if (openFileDialog1.ShowDialog() == DialogResult.OK)//判断是否选择了文件 { xml_FilePath = openFileDialog1.FileName;//记录用户选择的文件路径 XmlDocument xmlDocument = new XmlDocument();//新建一个XML“编辑器” xmlDocument.Load(xml_FilePath);//载入路径这个xml try { XmlNodeList xmlNodeList = xmlDocument.SelectSingleNode("class").ChildNodes;//选择class为根结点并得到旗下所有子节点 dataGridView1.Rows.Clear();//清空dataGridView1,防止和上次处理的数据混乱 foreach (XmlNode xmlNode in xmlNodeList)//遍历class的所有节点 { XmlElement xmlElement = (XmlElement)xmlNode;//对于任何一个元素,其实就是每一个<student> //旗下的子节点<name>和<number>分别放入dataGridView1 int index = dataGridView1.Rows.Add();//在dataGridView1新加一行,并拿到改行的行标 dataGridView1.Rows[index].Cells[0].Value = xmlElement.ChildNodes.Item(0).InnerText;//各个单元格分别添加 dataGridView1.Rows[index].Cells[1].Value = xmlElement.ChildNodes.Item(1).InnerText; } } catch { MessageBox.Show("XML格式不对!"); } } else { MessageBox.Show("请打开XML文件"); } } private void button2_Click(object sender, EventArgs e) { XmlDocument xmlDocument = new XmlDocument();//新建一个XML“编辑器” if (xml_FilePath != "")//如果用户已读入xml文件,我们的任务就是修改这个xml文件了 { xmlDocument.Load(xml_FilePath); XmlNode xmlElement_class = xmlDocument.SelectSingleNode("class");//找到<class>作为根节点 xmlElement_class.RemoveAll();//删除旗下所有节点 int row = dataGridView1.Rows.Count;//得到总行数 int cell = dataGridView1.Rows[1].Cells.Count;//得到总列数 for (int i = 0; i < row - 1; i++)//遍历这个dataGridView { XmlElement xmlElement_student = xmlDocument.CreateElement("student");//创建一个<student>节点 XmlElement xmlElement_name = xmlDocument.CreateElement("name");//创建<name>节点 xmlElement_name.InnerText = dataGridView1.Rows[i].Cells[0].Value.ToString();//其文本就是第0个单元格的内容 xmlElement_student.AppendChild(xmlElement_name);//在<student>下面添加一个新的节点<name> //同理添加<number> XmlElement xmlElement_number = xmlDocument.CreateElement("number"); xmlElement_number.InnerText = dataGridView1.Rows[i].Cells[1].Value.ToString(); xmlElement_student.AppendChild(xmlElement_number); xmlElement_class.AppendChild(xmlElement_student);//将这个<student>节点放到<class>下方 } xmlDocument.Save(xml_FilePath);//保存这个xml } else//如果用户未读入xml文件,我们的任务就新建一个xml文件了 { SaveFileDialog saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();//打开一个保存对话框 saveFileDialog1.Filter = "xml文件(*.xml)|*.xml";//设置允许打开的扩展名 if (saveFileDialog1.ShowDialog() == DialogResult.OK)//判断是否选择了一个文件路径 { XmlElement xmlElement_class = xmlDocument.CreateElement("class");//创建一个<class>节点 int row = dataGridView1.Rows.Count;//得到总行数 //int cell = dataGridView1.Rows[1].Cells.Count;//得到总列数 for (int i = 0; i < row - 1; i++)//得到总行数并在之内循环 { //同上,创建一个个<student>节点,并且附到<class>之下 XmlElement xmlElement_student = xmlDocument.CreateElement("student"); XmlElement xmlElement_name = xmlDocument.CreateElement("name"); xmlElement_name.InnerText = dataGridView1.Rows[i].Cells[0].Value.ToString(); xmlElement_student.AppendChild(xmlElement_name); XmlElement xmlElement_number = xmlDocument.CreateElement("number"); xmlElement_number.InnerText = dataGridView1.Rows[i].Cells[1].Value.ToString(); xmlElement_student.AppendChild(xmlElement_number); xmlElement_class.AppendChild(xmlElement_student); } xmlDocument.AppendChild(xmlDocument.CreateXmlDeclaration("1.0", "utf-8", ""));//编写文件头 xmlDocument.AppendChild(xmlElement_class);//将这个<class>附到总文件头,而且设置为根结点 xmlDocument.Save(saveFileDialog1.FileName);//保存这个xml文件 } else { MessageBox.Show("请保存为XML文件"); } } } }}
(1)首先,这里用到的打开文件对话框OpenFileDialog和保存文件对话框SaveFileDialog在《【C#】文件选择对话框OpenFileDialog与下列列表ComboBox》(点击打开链接)已经提到过了,这里不再赘述了。
(2)其次,dataGridView的操作,新添加一行将用到int index = dataGridView1.Rows.Add();并直接通过dataGridView1.Rows[index].Cells[n].Value = XX,对第n个单元格进行操作。遍历的话,先利用int i= dataGridView1.Rows.Count;得到总行数,如果有需要,还可以通过int j= dataGridView1.Rows[1].Cells.Count;得到总列数。之后一个for循环走起,还是通过dataGridView1.Rows[i].Cells[j].Value = XX对其每一个单元格进行操作。
(3)最后,关键是XML的读写,一开始要XmlDocument xmlDocument = new XmlDocument();生成一个操作类xmlDocument。xmlDocument.AppendChild可以附着文件头,与根结点。除了文件头以外,所有节点都要通过xmlDocument.CreateElement("XX");进行生成,对其类成员.InnerText可以进行内容的编辑。遍历的话,则可以通过XmlNodeList xmlNodeList = xmlDocument.SelectSingleNode("XX").ChildNodes;获得某节点下的所有子节点的遍历集。对此大致做了个图,大家将就看一下吧!
另外,xml的Load与Save不需要自己定义System.IO中的文件指针或者使用文件流,自己就包含了这一切了。
- 【C#】XML读写与dataGridView的使用
- c#|winfrom|DataGridView的使用
- DataGridView与XML文件的相互转存
- 【C++】【TinyXml】xml文件的读写功能使用——写xml文件
- c#datagridview使用技巧
- datagridview 与 XML数据绑定
- C#,数据库读写XML
- C#,数据库读写XML
- C#XML读写
- linux c xml 读写
- Objective-c读写xml
- C++XML读写
- java与XML文件的读写
- C# XML节点与属性的读写
- 关于配置xml的读写以及使用
- c/c++XML读写相关
- c/c++XML读写相关
- 使用XmlBeans读写xml
- Python+tensorflow计算整数阶乘的方法与局限性
- 【IMWeb训练营作业】vue组件
- Android 启动方式
- STL之vector分配内存问题
- 百度云资深架构师聊百度云存储架构特点
- 【C#】XML读写与dataGridView的使用
- Centos磁盘fsck问题
- iOS 利用模态 视图 实现 带 黑色蒙版 的 底部弹窗
- NT路径和DOS路径相互转换
- 考研英语
- css 学习提纲
- python Queue
- c++ 内联函数 (讲解的TM真好)
- 【黑客浅析】像黑客一样思考