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 ...
随机推荐
- SQL2008 存储过程参数相关
使用inputparame时,使用的是 varchar(20),和数据库中的DEPARTNAME完全匹配,可以查出值: USE [test] GO SET ANSI_NULLS OFF GO SE ...
- mssql 2008 失败 需要重新启动计算机 的解决办法
大致出错信息如下:RebootRequiredCheck 检查是否需要挂起计算机重新启动.挂起重新启动会导致安装程序失败. 失败 需要重新启动计算机.必须重新启动计算机才能安装 SQL Server. ...
- Windows计划任务 未能启动
近期在windows server 2003上运行的备份脚本,在7月23日之后,没再运行,在计划任务里看到的状态是:未能启动.结果手动运行了一下备份脚本,没有问题,可以正常运行,但是在计划任务里为什么 ...
- ASP.NET常用技术之Cookie
cookie是一小段的文本信息(多数浏览器限制cookie最大字节数为4096字节),在浏览器和服务器之间随用户请求而传递(用户访问网站,没有设置cookie限制范围情况下,无论请求那个页面,浏览器和 ...
- 流Stream个人学习理解
1.Stream类 命名空间:System.IO 程序集:mscorlib 流是对字节序列的抽象,提供字节序列的一般视图. 流的操作包括三个方面: 1.读取(Read):将流数据传入到数据结构 2.写 ...
- 导出EXCEL(转转)
)) content.AppendFormat("<td style='vnd.ms-excel.numberformat:#, ...
- IIS 中asp.net的一些配置
安装了IIS之后, 添加了虚拟目录然后运行页面, 出现了一点儿错误, 好像是不认识aspx文件, 把aspx文件当成是xml文件处理. 无法显示 XML 页. 使用 XSL 样式表无法查看 XML 输 ...
- js实现数组内元素随机排序
其实蛮容易实现的,关键是简洁与否,下面是我自己写的. function randomSort(a){ var arr = a, random = [], len = arr.length; for ( ...
- (function(){})(jQuery)的功能和用途?
1.为什么开发插件都这么写? 2.为什么要穿jQuery进去?在方法中直接用jquery的方法什么的不行吗? 1 首先(function(){})()这种写法 是创建了一个匿名的方法并立即执行(fun ...
- javascript控制图片等比例缩放
<SCRIPT language="JavaScript"> function DrawImage(ImgD,FitWidth,FitHeight){ var imag ...