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 ...
随机推荐
- MyEclipse内存不足的问题
今早打开MyEclipse莫名其妙弹出提示框,然后我各种搜索,用了网上能查到的各种办法去试图解决问题,方法包括但不限于 修改eclipse.ini .设置Default VM Arguments . ...
- oracle 语句
1.查询TRENDCHART_DLT表中的30条数据,统计字段FRONT01='0',BACK12='0'的条数 select sum(case when FRONT01='0' then 1 els ...
- Python文件之----CSV
# -*- coding:utf-8 -*- ''' Created on 2015年4月20日 @author: liuxue ''' import csv import sys reload(sy ...
- 武汉科技大学ACM :1003: A+B for Input-Output Practice (III)
Problem Description Your task is to Calculate a + b. Input Input contains multiple test cases. Each ...
- smarty 变量调节器
变量调节器:<{$a|变量调节器}> 了解更多可以查询smarty手册 主要修改此页面的信息来了解变量调节器:main.php/main.html(0603) 1.利用给定的变量调节器 c ...
- php 用post请求调用接口api
$post_data=""; $ch = curl_init(); $url = ''; curl_setopt($ch , CURLOPT_URL , $url); curl_s ...
- Python自动化运维之6、函数装饰器
装饰器: 装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator),装饰器的功能非常强大.装饰器一般接受一个函数对象作为参数, ...
- 转:Red Hat JBoss团队发布WildFly 8,全面支持Java EE 7并包含全新的嵌入式Web服务器
原文来自于:http://www.infoq.com/cn/news/2014/02/wildfly8-launch Red Hat的JBoss部门今天宣布WildFly 8正式发布.其前身是JBos ...
- Sicily shortest path in unweighted graph
题目介绍: 输入一个无向图,指定一个顶点s开始bfs遍历,求出s到图中每个点的最短距离. 如果不存在s到t的路径,则记s到t的距离为-1. Input 输入的第一行包含两个整数n和m,n是图的顶点 ...
- hosting company 的 mail , localhost send 不到
不是每一家 hosting 的 mail 都运行你在本地连接发email的. 或许是因为安全的顾虑吧. 总之下次如果发现在本地发不出email,可以试试看 upload to server. 过往经验 ...