三沣开发知识 购物 网址 游戏 小说 歌词 地图 快照 股票 美女 新闻 笑话 | 汉字 软件 日历 阅读 下载 图书馆 开发 租车 短信 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题
autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml
html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
  IT知识库 -> .NET新手区 -> C#基础知识 -> 正文阅读
 

[.NET新手区]C#基础知识

C#基础知识 上一篇中讲到XML基本的结构,还有增删改查的方法,这一篇中我们就来利用XML来完成一个简单的订单系统,主要是实现一个简单学生名单的增删改查,如果想要应用到实际的环境中建议考虑数据量的问题,如果数据量大使用XML的话会比较耗时,使用SQL的性能会好一些
这里使用WinForm窗体程序,大致界面如下:
 

创建了两个窗体,一个主窗体用来显示名单数据,当添加或者编辑操作时则使用另外一个窗体。 主窗体中放置四个按钮,以及一个DataGridView控件,另外一个添加、编辑窗体,则按照相应的字段放置好控件。 给各控件命好名。
XML文档的格式如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 
 3 <学生名单>
 4 
 5   <学生 Name="李四一" class="0102">
 6 
 7     <性别></性别>
 8 
 9     <生日>1999年1月2日</生日>
10 
11     <学号>20170</学号>
12 
13   </学生>
14 
15   <学生 Name="张三三" class="高一">
16 
17     <性别></性别>
18 
19     <学号>0102</学号>
20 
21     <生日>2017年6月18日</生日>
22 
23   </学生>
24 
25 </学生名单>

 学生名单为根元素,班级为根元素中的子元素,班级中又嵌套<学生>标记,了解了数据是以怎么的结构储存那么下面就继续。
数据在DataGridView中的显示
将XML中的数据,顺序显示在DataGridView控件中 

 1 //创建一个datatable存储XML中的数据
 2 
 3 DataTable dt = new DataTable();
 4 
 5 //指定每一列的列名,和数据类型
 6 
 7 dt.Columns.Add("Id", (typeof(System.String)));
 8 
 9 dt.Columns.Add("班级", (typeof(System.String)));
10 
11 dt.Columns.Add("姓名", (typeof(System.String)));
12 
13 dt.Columns.Add("学号", (typeof(System.String)));
14 
15 dt.Columns.Add("生日", (typeof(System.String)));
16 
17 dt.Columns.Add("性别", (typeof(System.String)));
18 
19 //创建一个DataRow对象
20 
21 DataRow dr = dt.NewRow();
22 
23  
24 
25 XmlDocument doc = new XmlDocument();
26 
27 //为相对路径表示前二级的目录
28 
29 doc.Load(@"..//..//Students.xml");
30 
31 XmlElement root = doc.DocumentElement;
32 
33 XmlNodeList studentNodes = root.GetElementsByTagName("学生");
34 
35 //使用foreach遍历集合元素
36 
37 foreach(var item in studentNodes)
38 
39 {
40 
41     dr["Id"] = ((XmlElement)item).GetAttribute("Id");
42 
43     dr["班级"] = ((XmlElement)item).GetAttribute("Class");
44 
45     dr["姓名"] = ((XmlElement)item).GetAttribute("Name");
46 
47     dr["学号"] = ((XmlElement)item).GetElementsByTagName("学号")[0].InnerText;
48 
49     dr["生日"] = ((XmlElement)item).GetElementsByTagName("生日")[0].InnerText;
50 
51     dr["性别"] = ((XmlElement)item).GetElementsByTagName("性别")[0].InnerText;
52 
53     dt.Rows.Add(dr);
54 
55 }
56 
57 //将DataTable绑定到DataGridView控件
58 
59 dgvStudents.DataSource = dt;

增加记录
因为添加学生和编辑学生都需要在同一个窗体,那么在打开添加或编辑窗体时使用构造函数来传值,并判断是编辑还是添加。 


  1 添加编辑窗体代码:
  2 
  3 public partial class FrmStudentAddandEdit : Form
  4 
  5 {
  6 
  7 //全局变量接受传值
  8 
  9 bool IsAdd;
 10 
 11 string Name;
 12 
 13     //使用构造函数进行传值 true为增加,false为编辑
 14 
 15     public FrmStudentAddandEdit(bool isAdd, string name)
 16 
 17 {
 18 
 19 this.IsAdd = isAdd;
 20 
 21 this.Name = name;
 22 
 23         InitializeComponent();
 24 
 25     }
 26 
 27 }
 28 
 29  
 30 
 31 主窗体添加按钮单击事件代码:
 32 
 33 private void btnAdd_Click(object sender, EventArgs e)
 34 
 35 {
 36 
 37 //在创建窗体时传值
 38 
 39      FrmStudentAddandEdit form = new FrmStudentAddandEdit(true);
 40 
 41      form.ShowDialog();
 42 
 43 }
 44 
 45  
 46 
 47 新增记录代码:
 48 
 49 private void btnOK_Click(object sender, EventArgs e)
 50 
 51 {
 52 
 53     XmlDocument doc = new XmlDocument();
 54 
 55     doc.Load(@"..//..//Students.xml");
 56 
 57     XmlElement root = doc.DocumentElement;
 58 
 59     //添加<学生>子节点
 60 
 61     XmlElement Shutdent = doc.CreateElement("学生");
 62 
 63     //设置Name属性和Class属性
 64 
 65     Shutdent.SetAttribute("Name", txtName.Text.Trim());
 66 
 67     Shutdent.SetAttribute("Class", txtClass.Text.Trim());
 68 
 69     //创建子节点
 70 
 71     XmlElement eSex = doc.CreateElement("性别");
 72 
 73     XmlText tSex = doc.CreateTextNode(cmbSex.Text.Trim());
 74 
 75     //子节点添加内容
 76 
 77     eSex.AppendChild(tSex);
 78 
 79     //将子节点添加进学生标记
 80 
 81     Shutdent.AppendChild(eSex);
 82 
 83  
 84 
 85     XmlElement eNum = doc.CreateElement("学号");
 86 
 87     XmlText tNum = doc.CreateTextNode(txtNumber.Text.Trim());
 88 
 89     eNum.AppendChild(tNum);
 90 
 91     Shutdent.AppendChild(eNum);
 92 
 93  
 94 
 95     XmlElement eBirthday = doc.CreateElement("生日");
 96 
 97     XmlText tBirthday = doc.CreateTextNode(dtpBirthday.Text.Trim('-'));
 98 
 99     eBirthday.AppendChild(tBirthday);
100 
101     Shutdent.AppendChild(eBirthday);
102 
103  
104 
105     //将<学生>标记添加进根节点
106 
107     root.AppendChild(Shutdent);
108 
109  
110 
111     doc.Save(@"..//..//Students.xml");
112 
113 MessageBox.Show("添加成功!");
114 
115 this.Close();
116 
117 }

View Code
编辑记录
由于编辑需要查找到这条记录然后复制到控件中显示,那么在我们启动”添加或编辑窗体”时需要判断当前是添加状态还是编辑状态,并将表格选择行的姓名字段传给构造函数,通过这个姓名字段查找相应的值,然后筛选出来再给控件赋值。 


  1 主窗口编辑按钮单击事件:
  2 
  3 private void btnEdit_Click(object sender, EventArgs e)
  4 
  5 {
  6 
  7 //获取当前选择表格的行索引
  8 
  9    int dgvIndex = dgvStudents.CurrentRow.Index;
 10 
 11    //根据行索引获取单元格的值
 12 
 13    string name = dgvStudents.Rows[dgvIndex].Cells["姓名"].Value.ToString();
 14 
 15    FrmStudentAddandEdit form = new FrmStudentAddandEdit(false,name);
 16 
 17    form.ShowDialog();
 18 
 19 }
 20 
 21  
 22 
 23 窗体启动事件进行判断是添加还是编辑:
 24 
 25 private void FrmStudentAddandEdit_Load(object sender, EventArgs e)
 26 
 27 {
 28 
 29    if (IsAdd)
 30 
 31    {
 32 
 33       this.Text = "添加学生";
 34 
 35    }
 36 
 37    else
 38 
 39    {
 40 
 41       this.Text = "编辑学生名单";
 42 
 43       XmlDocument doc = new XmlDocument();
 44 
 45       doc.Load(@"..//..//Students.xml");
 46 
 47       XmlElement root = doc.DocumentElement;
 48 
 49       //筛选出符合条件的标记
 50 
 51       XmlElement selectEle = (XmlElement)root.SelectSingleNode("/学生名单/学生[@Name='" + Name + "']");
 52 
 53       //筛选出符合条件并给控件赋值
 54 
 55       txtName.Text = selectEle.GetAttribute("Name");
 56 
 57       txtClass.Text = selectEle.GetAttribute("Class");
 58 
 59       txtNumber.Text = selectEle.GetElementsByTagName("学号")[0].InnerText;
 60 
 61       dtpBirthday.Text = selectEle.GetElementsByTagName("生日")[0].InnerText;
 62 
 63       cmbSex.Text = selectEle.GetElementsByTagName("性别")[0].InnerText;
 64 
 65      }
 66 
 67 }
 68 
 69 同样在编辑好内容后,单击确定按钮后判断当前是添加状态还是编辑状态:
 70 
 71 private void btnOK_Click(object sender, EventArgs e)
 72 
 73 {
 74 
 75    if (IsAdd)
 76 
 77    {
 78 
 79        //添加记录代码….
 80 
 81    }
 82 
 83    else
 84 
 85    {
 86 
 87        this.Text = "编辑学生名单";
 88 
 89        XmlDocument doc = new XmlDocument();
 90 
 91        doc.Load(@"..//..//Students.xml");
 92 
 93        XmlElement root = doc.DocumentElement;
 94 
 95        //筛选出符合条件的标记
 96 
 97        XmlElement selectEle = (XmlElement)root.SelectSingleNode("/学生名单/学生[@Name='" + Name + "']");
 98 
 99        selectEle.SetAttribute("Name",txtName.Text.Trim());
100 
101        selectEle.SetAttribute("Class",txtClass.Text.Trim());
102 
103        //筛选出的对象赋给XMLElement对象
104 
105        XmlElement eSex = (XmlElement)selectEle.GetElementsByTagName("性别")[0];
106 
107        eSex.InnerText = cmbSex.Text;
108 
109        XmlElement eNumber = (XmlElement)selectEle.GetElementsByTagName("学号")[0];
110 
111        eNumber.InnerText = txtNumber.Text;
112 
113        XmlElement eBirth = (XmlElement)selectEle.GetElementsByTagName("生日")[0];
114 
115        eBirth.InnerText = dtpBirthday.Text;
116 
117  
118 
119        doc.Save(@"..//..//Students.xml");
120 
121        MessageBox.Show("修改成功!");
122 
123        //这一步很重要一定要关闭窗口不然再次修改会出现不可预料的BUG
124 
125        this.Close();
126 
127    }
128 
129 }

View Code
删除记录
  也是一样的逻辑获取当前选择表格的姓名字段,然后按照相关姓名进行删除,如果姓名不是唯一字段,那么可以使用ID,每次添加一条记录的时候最大ID+1。

 1 //获取当前选择表格的行索引及姓名
 2 
 3 int dgvIndex = dgvStudents.CurrentRow.Index;
 4 
 5 string name = dgvStudents.Rows[dgvIndex].Cells["姓名"].Value.ToString();
 6 
 7 //筛选出符合条件的标记
 8 
 9 XmlElement selectEle = (XmlElement)root.SelectSingleNode("/学生名单/学生[@Name='" + Name + "']");
10 
11 //删除指定子元素
12 
13 root.RemoveChild(selectEle);
14 
15 doc.Save(“…”);
16 
17 //具体代码省略。。。。。不会的同学可以回到上篇文章。

上面介绍的操作方法是最常使用几种的,可以使用XML来完成一个数据量比较小的软件,或者可以用来做软件的配置文件。
  .NET新手区 最新文章
将ZIP文件添加到程序集资源文件然后在运行时
Web服务的调用
.NET创建WebService服务简单的例子
多线程编程学习笔记——任务并行库(三)
序列化和反序列化
Spring学习之路
bootstrap table编辑操作的时候 在模态框里
【C#】OOP之继承那点事
C#图解教程
CSS3中background属性的调整
上一篇文章           查看所有文章
加:2017-06-18 22:04:02  更:2017-06-18 22:04:04 
 
技术频道: 站长资讯 .NET新手区 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA Visual Studio ASP.NET MVC .NET控件开发 Entity Framework WinRT/Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动设计 Html/Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP Oracle ERP Dynamics CRM K2 BPM 信息安全 企业信息化其他 Android开发 iOS开发 Windows Phone Windows Mobile 其他手机开发 敏捷开发 项目与团队管理 软件工程其他 SQL Server Oracle MySQL NoSQL 其它数据库 Windows 7 Windows Server Linux
脚本语言: vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程
网站开发: CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2017年12日历
2017-12-14 6:40:31
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT知识库