C# winform xml的增删改查
代码如下:
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的增删改查的更多相关文章
- VB&XML的增删改查
简介:XML的增删改查 开发过程中有许多后台操作XML的过程,每次需要操作时都是找很多代码来参考或者百度一下.今天决定补充下XML操作的知识,把XML操作的增删改查都写了一遍,供以后开发参考 查询: ...
- 对oracle里面clob字段里面xml的增删改查学习
这段时间,我使用系统表里面有clob字段里面存放的xml信息,我们如何对xml进行增删改查操作呢,自己参考了很多也学到很多,给大家分享一下 首先我们先建测试表 CREATE TABLE EFGP_23 ...
- java实现xml文件增删改查
java一次删除xml多个节点: 方案1.你直接改动了nodeList,这一般在做循环时是不同意直接这么做的. 你能够尝试在遍历一个list时,在循环体同一时候删除list里的内容,你会得到一个异常. ...
- Mybatis之基于XML的增删改查
这里先吐槽下,写的半天的东西,IE浏览器弹出调试窗口导致写的东西全部没保存,搞得我还要重新用谷歌写,思路全没了,fuck. 前面学习了下spring的DAO层,说起DAO层,那ORM肯定是少不了的,O ...
- Mybatis_2.基于XML的增删改查
1.实体类User.java public class User { private int id; private String name; private int age; //getter.se ...
- java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查
一.XML和String互转: 使用dom4j程式变得很简单 //字符串转XML String xmlStr = \"......\"; Document document = D ...
- 使用idea对XML的增删改查
XML:是一种可扩展标记性的语言,与java语言无关,它可以自定义标签. 1.首先需要到导入Dom4j架包,与自己所时候的ide关联 2.编写自己的xml文件,入上图所示(里面的所有元素及元素中的属性 ...
- winform 窗体实现增删改查(CRUD)共用模式
转载:http://www.csframework.com/archive/2/arc-2-20110617-1632.htm 高度封装的编辑窗体 http://www.cnblogs.com/wuh ...
- c# xml的增删改查操作 xmlDocument 的用法
1.将xml转换为DataTable string path = "";//xml的位置StringReader sr = null;XmlTextReader xmlReader ...
随机推荐
- linux定时执行任务 转
转自:http://www.cnblogs.com/thinksasa/archive/2013/06/06/3121030.html linux定时执行任务 (1)Linux下如何定时执行php ...
- Revenge of Fibonacc
算法:搜索: In mathematical terms, the sequence Fn of Fibonacci numbers is defined by the recurrence rela ...
- memmove 的实现
baidu的笔试题目 用C语言实现一个公用库函数void * memmove(void *dest,const void *src,size_t n).该函数的功能是拷贝src所指的内存内容前n个字节 ...
- URAL 1008 - Image Encoding(bfs坑爹题)
坑爹题,两种输入输出互相交换,裸bfs #include <stdio.h> #include <string.h> typedef struct { int x; int y ...
- CentOS 7 之几个新特性(转)
上篇我们讲到默认没有ifconfig是centos7的新特性,所以我特意上网搜索了一下其新特性,找到一篇文章,现转过来. centos最小好化安装没有ifconfig命令 刚安装了centos7.0, ...
- php 魔术方法 __autoload()
PHP在魔术函数__autoload()方法出现以前,如果你要在一个程序文件中实例化100个对象,那么你必须用include或者require包含进来100个类文件,或者你把这100个类定义在同一个类 ...
- 《python基础教程》笔记之 字符串
字符串格式化 字符串格式化使用字符串格式化操作符即百分号%来实现.在%的左侧放置一个字符串(格式化字符串),而在右侧则放置希望格式化的值,可以使用一个值,如一个字符串或者数字,也可以使用多个值的元组或 ...
- DOS头 IMAGE_DOS_HEADER
IMAGE_DOS_HEADER STRUCT { +0h WORD e_magic // Magic DOS signature MZ(4Dh 5Ah) DOS可执行文件标记 +2h WORD e_ ...
- 【学习笔记】【Foundation】字符串
NSString 创建字符串: char *str="string" NSString* str=@“创建字符串”: NSString* str=[[NSString alloc] ...
- DotNET知识点总结三(笔记整合)
使用接口的注意事项: 接口中的成员不能加访问修饰符 接口中的成员不能有任何实现 实现接口的子类必须实现接口的全部成员 一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,并实现了接口 ...