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 ...
随机推荐
- iptables阻止服务器被攻击
下列规则将会阻止来自某一特定IP范围内的数据包,因为该IP地址范围被管理员怀疑有大量恶意攻击者在活动: # iptables -t filter -A INPUT -s 123.456.789.0/ ...
- grep和正则表达式
正则表达式示例表字 符 意 义 示 例* 任意长度的字符串. a* 表示: 空字符串.aaaa.a…? 长度为0或者1的字符串. a? 表示: 空字符串和a.+ 长度为一个或者多个的字符串. a+表示 ...
- ORACLE SQL单行函数(三)【weber出品必属精品】
16.L:代表本地货币符,这个和区域有关.这个时候我们想来显示一下人民币的符号:¥ $ vi .bash_profile ---写入如下内容: export NLS_LANG='SIMPLIFIED ...
- PHP Libxml
PHP Libxml 函数 PHP:指示支持该函数的最早的 PHP 版本. 函数 描述 PHP libxml_clear_errors() 清空 Libxml 错误缓冲. 5 libxml_get_e ...
- C# 操作电脑 关机 重启 注销 休止 休眠
// 关机 强制电脑10秒之内关机 //System.Diagnostics.Process.Start("shutdown", "-s -f -t 10"); ...
- (六)Angularjs - 启动引导
自动引导 AngularJs 通过 ng-app 指令进行自动引导 手工引导启动框架 如果一个HTML文件中 有多个ng-app,AngularJS只会自动引导启动它找到的第一个ng-app应用,这是 ...
- java学习——多线程
本文内容来源于 历经5年锤练--史上最适合初学者入门的Java基础视频 线程:就是进程中一个负责程序执行的控制单元(执行路径) 每一个线程都有自己运行的内容.这个内容可以称为线程要执行的任务. 多线 ...
- 你好,C++(22) 排排坐,吃果果——4.3.3 for循环:某个范围内…每个都…
4.3.3 for循环:某个范围内…每个都… 既然while语句和do…while…语句都已经可以满足我们表达循环现象的需要,那为什么C++还要专门提供for语句来表达循环现象呢?在现实世界中,常常 ...
- xml代码
修改和删除: <?php$doc=new DOMDocument();$doc->load("php.xml");$root=$doc->documentElem ...
- 简单运用 activity 的 button 点击事件
今天我们要讲的主要是四大组件之一Activity Activity 在英文中是活动的意思.活动就是我们与用户进行交互的一个场所. activity 整个的活动流程是什么呢?我们用一个图来看下 当然今天 ...