using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;
namespace LINQ操作XML
{
public partial class Form1 : Form
{
public Form1()
{
//15.10
//1.定义两个字符串类型的全局变量
//2.记录XML文件路径 记录选中的ID编号
InitializeComponent();
}
//记录XML文件路径
static string s1 = @"C:\Users\Administrator\Desktop\a.xml";
//记录选中的ID编号
static string s2 = "";
/// <summary>
/// 加载XML文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Load(object sender, EventArgs e)
{
getXmLInfo();
}
#region 将XML文件中的内容绑定到dataGridView控件
/// <summary>
/// 将XML文件中的内容绑定到dataGridView控件
/// </summary>
private void getXmLInfo()
{
DataSet ds = new DataSet();
ds.ReadXmlSchema(s1);
//读取XML结构
ds.ReadXml(s1);
//在dataGridView中显示XML文件中的信息
dataGridView1.DataSource = ds.Tables[0];
}
#endregion
/// <summary>
/// 使用LINQ to XML技术向指定的xml文件中插入用户输入的数据,并重新保存XML文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
//加载XML文件
XElement xe = XElement.Load(s1);
//创建IEnumerable泛型接口
IEnumerable<XElement> elements = from info in xe.Elements("People")
select info;
//生成新的编号
string str = (Convert.ToInt32(elements.Max(info => info.Attribute("ID").Value)) + 1).ToString("000");
//创建xml元素
XElement people = new XElement(
"People",new XAttribute("ID",str), //为XML元素设置属性
new XElement("Name",textBox1.Text),
new XElement("Sex",comboBox1.Text),
new XElement("Salary",textBox2.Text)
);
//添加XML元素
xe.Add(people);
//保存XML元素到XML文件
xe.Save(s1);
getXmLInfo();
}
/// <summary>
/// 查找选中记录的详细信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
//记录选中的ID编号
s2 = dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString();
//加载XML文档
XElement xe =XElement.Load(s1);
//根据编号查找信息
IEnumerable<XElement> elements = from info in xe.Elements("People")
where info.Attribute("ID").Value == s2
select info;
//遍历查找到的所有信息
foreach (var item in elements)
{
textBox1.Text = item.Element("Name").Value;
comboBox1.Text = item.Element("Sex").Value;
textBox2.Text = item.Element("Salary").Value;
}
}
/// <summary>
/// 修改XML文件指定记录
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
if (s2!="") //判断是否选择了编号
{
//加载XML文件
XElement xe = XElement.Load(s1);
//根据编号查找信息
IEnumerable<XElement> elements = from info in xe.Elements("People")
where info.Attribute("ID").Value == s2
select info;
//判断是否找到了信息
if(elements.Count()>0)
{
//获取找到的第一条记录
XElement Xe1 = elements.First();
//为XML元素设置属性值
Xe1.SetAttributeValue("ID", s2);
//替换XML元素中的值
Xe1.ReplaceNodes(
new XElement("Name",textBox1.Text),
new XElement("Sex",comboBox1.Text),
new XElement("Salary",textBox2.Text)
);
//保存XML元素到XML文件
xe.Save(s1);
}
getXmLInfo();
}
}
/// <summary>
/// 删除的记录
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
if (s2!="")
{
XElement xe = XElement.Load(s1);
//根据编号查找信息
IEnumerable<XElement> elements = from info in xe.Elements("People")
where info.Attribute("ID").Value == s2
select info;
if (elements.Count()>0)
{
elements.First().Remove();
xe.Save(s1);
}
getXmLInfo();
}
}
}
位置出错在于
不知道怎么解决,有没有大佬告诉: