,Visual Basic,讲授人,CONTENTS,第五章,Access 2010,窗体,第,1,章,Microsoft.NET,与,Visual Basic,第,2,章,VB 2010,初步,电子时钟程序,第,3,章 猜数游戏,第,4,章 抽奖程序,第,5,章 图片浏览器,第,6,章 构建宿舍管理系统项目主窗体,第,7,章 实现系统登录,CONTENTS,第,8,章 查看用户信息,第,9,章 编辑用户信息,第,10,章 简化数据库操作,第,11,章 添加学生信息,第,12,章 查看学生列表,第,13,章 更新学生信息,第,14,章 实训项目,通讯录管理系统,第,13,章 更新学生信息,任务,13.1,将学生信息更新到数据库,更新后的学生信息都存储在,DataSet,中的,DataTable,对象里,这些数据缓存在本地内存中,它们是不会自动更新到数据库中的,必须另外编写代码完成更新。,DataAdapter对象的Update()方法可以完成这个任务。,Update()方法的调用格式为:,DataAdapter对象.Update(DataTable对象),或,DataAdapter对象.Update(DataSet对象,“表名称”),任务,13.1,将学生信息更新到数据库,13.1.1,DataAdapter,对象更新原理,任务,13.1,将学生信息更新到数据库,13.1.2,CommandBuilder,对象,CommandBuilder对象可以根据给定的SELECT语句自动生成相应的Insert语句、Delete语句和Update语句。每一个,.,NET数据提供程序都有自己的CommandBuilder类。,使用CommandBuilder对象自动生成SQL语句,实现更新数据库的操作一般按如下步骤进行:,1,.,创建Connection对象,与数据库建立连接。,2,.,创建查询用的SELECT SQL语句。,3,.,使用SQL语句和Connection对象创建Command对象。,4,.,使用Command对象创建DataAdapter对象。,5,.,使用DataAdapter对象创建CommandBuilder对象。,6,.,调用DataAdapter对象的Update()方法更新数据库。,示例:使用DataSet对象读取UserInfo表中的数据,并将第1个用户的密码(Password列)修改为“000000”,然后调用DataAdapter对象Update()方法将修改后的数据更新到数据库中。,实现步骤:,1,.,建立一个Windows应用程序。在窗体中绘制一个Button控件,设置控件的Name属性值为“btnChange”,Text属性为“修改用户密码”。,2,.,编写btnChange按钮的Click事件,通过DataAdapter对象的Fill()方法将UserInfo表中的数据填充到DataSet里,然后直接修改DataSet中第1行数据的Password列的内容,接下来创建CommandBuilder对象,为DataAdapter自动生成相应属性,最后调用Update()方法将数据更新到数据库。,任务,13.1,将学生信息更新到数据库,13.1.3,更新学生信息,1.,添加,Update(),方法,在,DB,类中添加一个名为“,Update()”,的共享方法,这个方法可以将指定的,DataTable,中的数据更新到数据库。,任务,13.1,将学生信息更新到数据库,13.1.3,更新学生信息,2.,调用,DB,类的,Update(),方法,编写,btnSave,按钮的,Click,事件,更新数据。,1.,建立快捷菜单,在窗体中添加一个,ContextMenuStrip,控件,将其,Name,属性设置为“,cmsSex”,。再为其添加两个菜单项,分别表示“男”和“女”。将“男”菜单的,Name,属性设置为“,tsmMan”,,,Text,属性设置为“男”;将“女”菜单的,Name,属性设置为“,tsmWoman”,,,Text,属性设置为“女”。,任务,13.2,修改学生性别,任务,13.3,修改住宿房间,1.,动态添加菜单项,13.3.1,动态生成菜单,ContextMenuStrip,控件的,Items,属性集合包含了菜单中所有的菜单项,可以以代码的方式向,Items,属性集合中添加新的菜单项来实现动态添加菜单。,添加语法格式为:,ContextMenuStrip.Items.Add(,新菜单项,),示例:为ContextMenuStrip控件动态添加5个菜单项,菜单项的内容分别是“1”,“2”,“3”,“4”,“5”。,实现步骤:,(1)建立一个Windows应用程序。,(2)编写btnAdd按钮的Click事件,通过一个5次的循环向cms控件添加5个菜单项。,任务,13.3,修改住宿房间,2.,处理菜单事件,13.3.1,动态生成菜单,事件是对象发送的消息,用以发送信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的。引发事件的对象称为事件发送方。捕获事件并对其作出响应的对象叫事件接收方。,在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。需要的是,在源和接收方之间存在一个媒介(或类似指针的机制)。,.NET Framework,定义了,Delegate,类型(委托),该类型提供函数指针的功能。,EventHandler委托是一个预先定义的委托,表示事件的处理程序方法。,委托签名格式为:,Sub 方法名(ByVal sender As System,.,Object,ByVal e As System,.,EventArgs),定义EventHandler委托可以按照下面的步骤进行:,(1)定义一个与EventHandler委托签名格式相同的方法。,(2)使用EventHandler类将方法与事件相关联。,示例:为菜单定义Click事件,使得单击菜单项后能够显示选择的菜单的内容。,实现步骤:,(1)在窗体中定义一个名称为“tsmi_Click()”的方法。,(2)在动态添加菜单的循环中添加使用EnevtHander类,将tsmi_Click()方法与菜单项的Click事件相关联。,小技巧:在定义委托事件时,当输入“AddressOf tsmiClick”语句后,Visual Studio开发环境会自动在tsmiClick下显示“错误纠正选项”菜单,此时,单击菜单,选择“生成tsmiClick方法存根”选项,Visual Studio开发环境将自动为我们建立与Click事件委托签名格式相同的方法,这样就不用手工编写了。,任务,13.3,修改住宿房间,1.,使用,Find(),方法查询数据,13.3.2,在,DataView,中查询数据,DataView,对象提供了,Find(),方法,它可以按指定的关键字在,DataView,中查找相应的数据。,Find()方法使用格式为:,dataView,.,Find(查询内容),例如:假设dv是一个DataView对象,要查询学生编号(SID)为“5”的记录在第几行的代码为:,dv,.,Sort=“sid”排序,设置查询关键字,int c=dv,.,Find(5)查询SID为“5”的记录在DataView中的位置,任务,13.3,修改住宿房间,2.,完成修改宿舍信息,13.3.2,在,DataView,中查询数据,本章总结,在这一章中,我们实现了更新学生信息的功能,可以修改住宿学生的房间、性别等信息。主要学习了:,DataAdapter,对象的,Update(),方法可以向数据库中更新数据,该对象的,InsertCommand,,,DeleteCommand,和,UpdateCommand,属性表示更新数据时所用到的,Command,对象。,CommandBuilder,对象可以帮助我们快速生成,DataAdapter,对象更新数据时所需要的更新命令,(Command,对象,),。,DataGridView,控件支持数据编辑功能,我们可以在控件中直接修改数据。,将,DataGridView,控件中列的,ReadOnly,属性设置为“,True”,可以禁止用户在控件中直接修改数据。设置,ContextMenuStrip,属性可以为列添加一个快捷菜单。,在代码中定义,ToolStripMenuItem,对象可以动态添加菜单项,使用委托技术可以动态地指定对象的事件。,DataView,对象的,Find(),方法可以按指定关键字查询数据,关键字由,Sort(),方法指定。,习题,1.,如何把,DataSet,中的数据更新到数据库中?,2.CommandBuilder,对象有什么重要的功能?在使用中有哪些限制?,3.,请说明项目代码,32,中各条语句的含义。,4.,在动态菜单中,如何处理菜单项事件?,5.,如何在,DataGridView,控件中修改那些未显示的列的数据?,Thank You,