代码如下:

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; }
} }

C# winform xml的增删改查的更多相关文章

  1. VB&XML的增删改查

    简介:XML的增删改查 开发过程中有许多后台操作XML的过程,每次需要操作时都是找很多代码来参考或者百度一下.今天决定补充下XML操作的知识,把XML操作的增删改查都写了一遍,供以后开发参考 查询: ...

  2. 对oracle里面clob字段里面xml的增删改查学习

    这段时间,我使用系统表里面有clob字段里面存放的xml信息,我们如何对xml进行增删改查操作呢,自己参考了很多也学到很多,给大家分享一下 首先我们先建测试表 CREATE TABLE EFGP_23 ...

  3. java实现xml文件增删改查

    java一次删除xml多个节点: 方案1.你直接改动了nodeList,这一般在做循环时是不同意直接这么做的. 你能够尝试在遍历一个list时,在循环体同一时候删除list里的内容,你会得到一个异常. ...

  4. Mybatis之基于XML的增删改查

    这里先吐槽下,写的半天的东西,IE浏览器弹出调试窗口导致写的东西全部没保存,搞得我还要重新用谷歌写,思路全没了,fuck. 前面学习了下spring的DAO层,说起DAO层,那ORM肯定是少不了的,O ...

  5. Mybatis_2.基于XML的增删改查

    1.实体类User.java public class User { private int id; private String name; private int age; //getter.se ...

  6. java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查

    一.XML和String互转: 使用dom4j程式变得很简单 //字符串转XML String xmlStr = \"......\"; Document document = D ...

  7. 使用idea对XML的增删改查

    XML:是一种可扩展标记性的语言,与java语言无关,它可以自定义标签. 1.首先需要到导入Dom4j架包,与自己所时候的ide关联 2.编写自己的xml文件,入上图所示(里面的所有元素及元素中的属性 ...

  8. winform 窗体实现增删改查(CRUD)共用模式

    转载:http://www.csframework.com/archive/2/arc-2-20110617-1632.htm 高度封装的编辑窗体 http://www.cnblogs.com/wuh ...

  9. c# xml的增删改查操作 xmlDocument 的用法

    1.将xml转换为DataTable string path = "";//xml的位置StringReader sr = null;XmlTextReader xmlReader ...

随机推荐

  1. PHP Sessions

    PHP Sessions PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置.Session 变量存储单一用户的信息,并且对于应用程序中 ...

  2. JavaScript 函数之 ------------------ 闭包

    谈到闭包,人们常常会把匿名函数和闭包混淆在一起.闭包是指由权访问另一个函数作用域中的变量的函数.创建闭包的常见方式,就是在一个函数内部创建另一个函数,仍以前面的 createComparisonFun ...

  3. 如何启动Service,如何停用Service(转)

    如何启用Service,如何停用Service Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发现,可以使用它开发如监控之类的程序.服 ...

  4. HTTP状态码:400\500 错误代码

    一些常见的状态码为: 200 - 服务器成功返回网页404 - 请求的网页不存在503 - 服务不可用详细分解: 1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码. 代码  说明100 ...

  5. MYSQL id 自动加1

    个人心得 建立好表以后再进行修改总是容易出错 建议用sql语句进行创建表,定义相应的属性 CREATE TABLE USER( Id INTEGER PRIMARY KEY AUTO_INCREMEN ...

  6. mysql 整形的长度问题

    tinyint  有符号的范围是-128至127: 无符号的范围是0到255,2的8 次方-1: 存储大小为 1 字节. smallint  有符号的范围是-32768至32767: 无符号的范围是0 ...

  7. 自己寫的 Loading JS插件

    本文為原創文章,轉載請注明出處,謝謝./** * @author samkin.yang * @version 1.0 */var $_yxj = new SamkinLoading(); (func ...

  8. Google Chrome一些小技巧

    document.body.contentEditable='true'; 可以编辑网页上的内容

  9. 复杂事件处理引擎—Esper入门

    说明: 以下内容,可以参考Esper官方网站<Qucik start & Tutorial >(顺序做了部分调整). PS:因为英语水平有限(大学期间刚过CET4的英语小盲童一枚) ...

  10. 09 - 删除vtkDataObject中的ShouldIReleaseData() and ReleaseDataFlag 方法 VTK 6.0 迁移

    VTK6 引入了许多不兼容的变.其中之一是删除vtkDataObject中所有有关管道的方法.下面列出来的就是其中的一些方法: ShouldIReleaseData() SetReleaseDataF ...