【C#】XML读写与dataGridView的使用

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中的文件指针或者使用文件流,自己就包含了这一切了。

  • 18
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
在WinForm中操作DataGridView读写XML文件可以通过以下步骤实现: 1. 首先,创建一个WinForm应用程序,并向窗体中添加一个DataGridView控件。 2. 在窗体的Load事件中,读取XML文件内容,并将其加载到DataGridView中。可以使用XmlDocument类来读取XML文件,使用其Load方法加载文件,并使用SelectNodes方法获取需要的节点数据。 3. 将XML文件中的数据添加到DataGridView中,可以通过遍历获取到的节点数据,将其添加到DataGridView的行中。 4. 编写保存按钮的Click事件处理方法,在该方法中将DataGridView中的数据保存为XML文件。可以使用XmlDocument类来创建XML文档对象,并使用其CreateElement、CreateAttribute等方法创建XML节点和属性,并将DataGridView中的数据逐一添加到XML文件中,最后使用Save方法保存XML文件。 5. 在保存XML文件之后,可以通过重新加载XML文件的方式更新DataGridView中的数据显示。 示例代码如下: private void Form1_Load(object sender, EventArgs e) { // 读取XML文件 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("data.xml"); // 获取需要的节点数据 XmlNodeList nodes = xmlDoc.SelectNodes("/root/item"); // 添加节点数据到DataGridView foreach (XmlNode node in nodes) { // 获取节点数据,并添加到DataGridView的行中 string name = node.SelectSingleNode("name").InnerText; string age = node.SelectSingleNode("age").InnerText; dataGridView1.Rows.Add(name, age); } } private void btnSave_Click(object sender, EventArgs e) { // 创建XML文档对象 XmlDocument xmlDoc = new XmlDocument(); // 创建根节点 XmlElement root = xmlDoc.CreateElement("root"); xmlDoc.AppendChild(root); // 遍历DataGridView中的行 foreach (DataGridViewRow row in dataGridView1.Rows) { // 创建item节点 XmlElement item = xmlDoc.CreateElement("item"); // 创建name属性 XmlAttribute nameAttr = xmlDoc.CreateAttribute("name"); nameAttr.Value = row.Cells[0].Value.ToString(); item.Attributes.Append(nameAttr); // 创建age属性 XmlAttribute ageAttr = xmlDoc.CreateAttribute("age"); ageAttr.Value = row.Cells[1].Value.ToString(); item.Attributes.Append(ageAttr); // 添加item节点到根节点 root.AppendChild(item); } // 保存XML文件 xmlDoc.Save("data.xml"); // 重新加载XML文件,更新DataGridView数据 Form1_Load(null, null); } 这样,通过以上步骤,就可以在WinForm应用程序中通过DataGridView操作读写XML文件了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值