代码如下:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Windows.Forms; using System.Xml.Linq; namespace XMLAction { public partial class Form1 : Form { public Form1() { InitializeComponent(); } /// <summary> /// 从xml加载用户 /// </summary> /// <param name="dgv">DataGridView</param> private void LoadUserData(DataGridView dgv) { //加载xml文件 XDocument xDoc = XDocument.Load("UserData.xml"); //获取根节点 XElement root = xDoc.Root; List<User> list = new List<User>(); //循环加载用户 foreach (XElement item in root.Elements("user")) { User model = new User(item.Attribute("id").Value.ToString(), item.Element("name").Value.ToString(), item.Element("pwd").Value.ToString()); list.Add(model); } dgv.DataSource = list; } private void Form1_Load(object sender, EventArgs e) { if (!System.IO.File.Exists(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),"UserData.xml")))//Directory.GetCurrentDirectory(), "UserData.xml"))) { //MessageBox.Show("程序第一次运行,请先使用[CreateXML.exe]程序完成环境配置"); //Application.Exit(); //创建xml对象 XDocument xDoc = new XDocument(); //创建根节点 XElement root = new XElement("Users"); //添加根节点 xDoc.Add(root); //保存xml文件 xDoc.Save("UserData.xml"); } dataGridView1.MultiSelect = false;//取消多行 dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;//选中整行 txtUId.ReadOnly = true;//修改时Id是不可变的 LoadUserData(dataGridView1); } private void btnRegister_Click(object sender, EventArgs e) { string id = txtRId.Text.Trim(); string name = txtRName.Text.Trim(); string pwd = txtRPwd.Text; if (string.IsNullOrEmpty(id) || string.IsNullOrEmpty(name) || string.IsNullOrEmpty(pwd)) { MessageBox.Show("请填写注册信息"); return; } //加载xml XDocument xDoc = XDocument.Load("UserData.xml"); //获取根节点 XElement root = xDoc.Root; //搜索当前注册用户ID是否存在 XElement isHaveUser = root.Elements("user").SingleOrDefault(p => p.Attribute("id").Value.ToString() == id); if (isHaveUser == null) { //创建user节点对象 XElement userElement = new XElement("user"); userElement.SetAttributeValue("id", id); //增加两个子节点 userElement.SetElementValue("name", name); userElement.SetElementValue("pwd", pwd); //保存user节点 root.Add(userElement); xDoc.Save("UserData.xml"); MessageBox.Show("成功!注册用户ID为【" + id + "】"); LoadUserData(dataGridView1); } else { MessageBox.Show("用户ID【" + id + "】已存在"); } } //双击DataGridView控件就刷新一次数据 private void dataGridView1_DoubleClick(object sender, EventArgs e) { LoadUserData(dataGridView1); } private void btnDelete_Click(object sender, EventArgs e) { if (MessageBox.Show("确认删除?", "操作提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) { string id = dataGridView1.SelectedRows[0].Cells[0].Value.ToString(); //加载xml XDocument xDoc = XDocument.Load("UserData.xml"); //获取根节点 XElement root = xDoc.Root; try { //获取这个节点 XElement userElement = root.Elements("user").Where(p => p.Attribute("id").Value.ToString() == id).Single(); //删除这个节点 userElement.Remove(); //保存操作后的xml文件 xDoc.Save("UserData.xml"); MessageBox.Show("删除成功"); //加载数据 LoadUserData(dataGridView1); } catch(Exception ex) { MessageBox.Show("删除失败,请刷新后重试:"+ex.Message); } } else MessageBox.Show("未删除"); } //DataGridView行焦点改变 private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e) { string id = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString(); string name = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString(); string pwd = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString(); txtUId.Text = id; txtUName.Text = name; txtUPwd.Text = pwd; } private void btnUpdate_Click(object sender, EventArgs e) { string id = txtUId.Text.Trim(); string name = txtUName.Text.Trim(); string pwd = txtUPwd.Text; //加载xml文件 XDocument xDoc = XDocument.Load("UserData.xml"); //获取根节点 XElement root = xDoc.Root; //找到要修改的用户 try { XElement crrentElement = root.Elements("user").Where(p => p.Attribute("id").Value.ToString() == id).Single(); crrentElement.SetElementValue("name", name); crrentElement.SetElementValue("pwd", pwd); //完成修改操作后,保存xml文件 xDoc.Save("UserData.xml"); MessageBox.Show("修改成功"); LoadUserData(dataGridView1); } catch { MessageBox.Show("修改失败,请刷新后重试"); } } private void btnLogin_Click(object sender, EventArgs e) { string id = txtLId.Text.Trim(); string pwd = txtLPwd.Text; if (string.IsNullOrEmpty(id) || string.IsNullOrEmpty(pwd)) { MessageBox.Show("请填写用户Id和密码"); return; } //加载xml文件 XDocument xDoc = XDocument.Load("UserData.xml"); //获取根节点 XElement root = xDoc.Root; try { XElement user = root.Elements("user").Where(p => p.Attribute("id").Value.ToString() == id).Single(); if (user.Element("pwd").Value.ToString() == pwd) MessageBox.Show("登录成功"); else MessageBox.Show("密码错误"); } catch { MessageBox.Show("用户不存在"); } } } public class User { public User(string id, string name, string pwd) { this.Id = id; this.Name = name; this.Pwd = pwd; } public string Id { get; set; } public string Name { get; set; } public string Pwd { get; set; } } }