资源描述
会计学1完成修改员工信息功能完成修改员工信息功能2任务任务7:完成修改员工信息功能:完成修改员工信息功能n n学习目标:n n了解如何获取了解如何获取DataGridViewDataGridView选中行的数据。选中行的数据。n n掌握如何在窗体间传递数据。掌握如何在窗体间传递数据。n n进一步熟悉使用进一步熟悉使用CommandCommand对象和对象和ParametersParameters对对象操作数据库。象操作数据库。本任务在任务本任务在任务6“将员工信息保存到数据库将员工信息保存到数据库”基础上继续进行。基础上继续进行。第1页/共22页37.1 设计设计“修改员工信息修改员工信息”窗体窗体n n由于“修改员工信息”窗体基本与“添加新员工”差不多,我们将FrmNewEmployee窗体复制过来,形成“副本FrmNewEmployee”。n n打开“副本FrmNewEmployee”窗体,将其名称修改为FrmEditEmployee,之后会有以下提示,记住一定要选择“取消”。第2页/共22页47.1 设计设计“修改员工信息修改员工信息”窗体窗体n n之后,作以下修改:n nTitleTitle属性:修改员工信息属性:修改员工信息n n删去删去 等控件等控件n n删去删去 控件控件第3页/共22页57.2 获取获取DataGridView中当前选中当前选中的行中的行n nDataGridView控件的CurrentRow属性可以获取当前选中的行,其属性为DataGridViewRow。n nDataGridViewRow具有属性Cells,可以获取这一行的所有单元格集合。如Cells0可以获取第一个单元格对象(类型为DataGridViewCell)。n nDataGridViewCell具有Value属性,代表该单元格的值,类型为object。根据需要转换成该单元格的实际数据类型。/获取选定员工的编号获取选定员工的编号int empID=(int)grdEmployee.CurrentRow.Cells0.Value;第4页/共22页67.3 将员工编号传递给将员工编号传递给“修改员修改员工信息工信息”窗体窗体n n用户动作为:n n选中选中“员工列表员工列表”窗体某个员工所在行窗体某个员工所在行n n点击点击“修改员工修改员工”按钮按钮n n在在“修改员工信息修改员工信息”窗体显示所选员工详细信窗体显示所选员工详细信息息n n修改完成后,点击修改完成后,点击“修改修改”按钮按钮n n员工信息保存回数据库,员工信息保存回数据库,“员工列表员工列表”窗体更窗体更新数据新数据n n因此,“修改员工信息”窗体只需要读取选定员工的信息。n n如何将“员工列表”的员工号传递给“修改员工信息”窗体呢?n n使用类成员使用类成员第5页/共22页7定义类成员定义类成员n n在在FrmEditEmployeeFrmEditEmployee类,定义类,定义EmployeeIDEmployeeID成员,该成员可以在类外部访问。如成员,该成员可以在类外部访问。如何定义?何定义?n n这样,可以在这样,可以在“员工列表员工列表”窗体中按如下方式调用:窗体中按如下方式调用:FrmEditEmployee frmEmp=new FrmEditEmployee();frmEmp.EmployeeID=empID;if(DialogResult.OK=frmEmp.ShowDialog()dsEmployee.Clear();BindGrid();public partial class FrmEditEmployee:Form public int EmployeeID;第6页/共22页87.4 读取给定员工数据读取给定员工数据n n接下来,启动“修改员工信息”窗体,需要先将员工信息从数据库中读取,并在窗体控件中显示。n n往往“员工列表员工列表”窗体添加窗体添加SqlCommandSqlCommand控件,命控件,命名为名为cmdSelectEmpcmdSelectEmp。n n配置配置SqlCommandSqlCommand控件的控件的ConnectionConnection属性为属性为SqlConnection1SqlConnection1。n n使用查询生成器配置使用查询生成器配置SqlCommandSqlCommand控件的控件的CommandTextCommandText属性为:属性为:SELECT EmployeeID,Name,LoginName,Password,Birthday,Email,DeptID,BasicSalary,Title,Telephone,SelfIntro,EmployeeLevel,PhotoImageFROM tblEmployeeWHERE(EmployeeID=EmpID)第7页/共22页9读取指定员工信息显示在窗体读取指定员工信息显示在窗体n n由于这里只需要读取一条数据库刻录,因此只需要使用SqlDataReader类实现就可以了。n n定义定义SqlDataReaderSqlDataReader对象对象n n打开相应的数据库连接打开相应的数据库连接n n给给SqlCommandSqlCommand的参数对象进行赋值的参数对象进行赋值System.Data.SqlClient.SqlDataReader dr=null;cmdSelectEmp.Connection.Open();cmdSelectEmp.ParametersEmpID.Value =EmployeeID;第8页/共22页10读取指定员工信息显示在窗体读取指定员工信息显示在窗体n n使用SqlDataReader对象读取数据n n使用使用SqlCommandSqlCommand的的ExecuteReaderExecuteReader方法读取数据方法读取数据到到SqlDataReaderSqlDataReader对象对象n n将读取的数据显示在窗体的控件上将读取的数据显示在窗体的控件上n n关闭数据库连接关闭数据库连接dr=cmdSelectEmp.ExecuteReader();if(dr.Read()txtName.Text=(string)drName;cmdSelectEmp.Connection.Close();第9页/共22页11*读取照片数据读取照片数据n n读取照片数据时,SqlDataReader对象读的值是byte类型,需要转换为Image类型才能在PictureBox中显示。byte photobyte=drPhotoImage as byte;if(photobyte!=null)System.IO.MemoryStream photo =new System.IO.MemoryStream(photobyte);picPhoto.Image=new Bitmap(photo);第10页/共22页12Code 1/4:读取员工信息完整代码读取员工信息完整代码n n在FrmEditEmployee_Load事件中写入以下代码:private void FrmEditEmployee_Load(object sender,EventArgs e)try daDepart.Fill(dsDepart,Depart);cmbDepart.DataSource=dsDepart.TablesDepart;cmbDepart.DisplayMember=DeptName;cmbDepart.ValueMember=DeptID;catch MessageBox.Show(读取部门列表数据出错,可能无法修改员工信息。读取部门列表数据出错,可能无法修改员工信息。,错误错误,MessageBoxButtons.OK,MessageBoxIcon.Error);return;第11页/共22页13Code 2/4:读取员工信息完整代读取员工信息完整代码码 System.Data.SqlClient.SqlDataReader dr=null;try cmdSelectEmp.Connection.Open();cmdSelectEmp.ParametersEmpID.Value=EmployeeID;dr=cmdSelectEmp.ExecuteReader();if(dr.Read()txtName.Text=(string)drName;txtLogin.Text=(string)drLoginName;txtPassword.Text=(string)drPassword;txtBirthday.Text=(DateTime)drBirthday).ToString(yyyy年年MM月月dd日日);txtEmail.Text=(string)drEMail;cmbDepart.SelectedValue=(int)drDeptid;txtTitle.Text=(string)drTitle;numLevel.Value=(int)drEmployeeLevel;第12页/共22页14Code 3/4:读取员工信息完整代读取员工信息完整代码码 numSalary.Value=(int)drBasicSalary;txtPhone.Text=drTelephone as string;txtSelfIntro.Text=drSelfIntro as string;byte photobyte=drPhotoImage as byte;if(photobyte!=null)System.IO.MemoryStream photo =new System.IO.MemoryStream(photobyte);picPhoto.Image=new Bitmap(photo);第13页/共22页15Code 4/4:读取员工信息完整代读取员工信息完整代码码 catch MessageBox.Show(读取用户数据出错读取用户数据出错!);finally dr.Close();cmdSelectEmp.Connection.Close();第14页/共22页167.5 保存修改后的员工信息保存修改后的员工信息n n保存修改信息需要使用Update语句。n n将SqlCommand控件拖放到窗体,命名为cmdUpdateEmp。n nConnectionConnection属性设置为:属性设置为:SqlConnectionSqlConnectionn n使用查询生成器配置使用查询生成器配置CommandTextCommandText属性为:属性为:UPDATE tblEmployeeSET Name=Name,LoginName=LoginName,Password=Password,Birthday=Birthday,Email=Email,DeptID=DeptID,BasicSalary=BasicSalary,Title=Title,Telephone=Telephone,SelfIntro=SelfIntro,EmployeeLevel=EmployeeLevel,PhotoImage=PhotoImageWHERE(EmployeeID=EmpID)第15页/共22页177.5 保存修改后的员工信息保存修改后的员工信息n n修改数据库记录的过程如下:n n打开数据库连接打开数据库连接n n给给SqlCommandSqlCommand各参数对象赋值各参数对象赋值n n执行执行SqlCommandSqlCommand对象的对象的ExecuteNonqueryExecuteNonquery方法方法n n关闭数据库连接关闭数据库连接cmdUpdateEmp.Connection.Open();cmdUpdateEmp.ParametersEmpID.Value=EmployeeID;cmdUpdateEmp.ParametersName.Value=txtName.Text;cmdUpdateEmp.ExecuteNonQuery();cmdUpdateEmp.Connection.Close();第16页/共22页18Code 1/4:修改员工信息完整代码修改员工信息完整代码n n在BtnUpdate_Click事件中写入以下代码:private void btkUpdate_Click(object sender,EventArgs e)if(!ValidateChildren()this.DialogResult=DialogResult.None;return;cmdUpdateEmp.Connection.Open();cmdUpdateEmp.ParametersEmpID.Value=EmployeeID;cmdUpdateEmp.ParametersName.Value=txtName.Text;cmdUpdateEmp.ParametersLoginName.Value=txtLogin.Text;cmdUpdateEmp.ParametersPassword.Value =txtPassword.Text;cmdUpdateEmp.ParametersBirthday.Value =Convert.ToDateTime(txtBirthday.Text);cmdUpdateEmp.ParametersEmail.Value=txtEmail.Text;第17页/共22页19Code 2/4:修改员工信息完整代修改员工信息完整代码码 cmdUpdateEmp.ParametersDeptid.Value =cmbDepart.SelectedValue;cmdUpdateEmp.ParametersTitle.Value=txtTitle.Text;cmdUpdateEmp.ParametersEmployeeLevel.Value =numLevel.Value;cmdUpdateEmp.ParametersBasicSalary.Value =numSalary.Value;cmdUpdateEmp.ParametersTelephone.Value =txtPhone.Text;cmdUpdateEmp.ParametersSelfINtro.Value =txtSelfIntro.Text;第18页/共22页20Code 3/4:修改员工信息完整代修改员工信息完整代码码 /将图片数据转换成二进制将图片数据转换成二进制 ImageConverter ic=new ImageConverter();byte photoByteArray =ic.ConvertTo(picPhoto.Image,typeof(byte)as byte;if(photoByteArray!=null)cmdUpdateEmp.ParametersPhotoImage.Value =photoByteArray;else cmdUpdateEmp.ParametersPhotoImage.Value =Convert.DBNull;第19页/共22页21Code 4/4:修改员工信息完整代修改员工信息完整代码码 try cmdUpdateEmp.ExecuteNonQuery();MessageBox.Show(成功修改员工信息。成功修改员工信息。,成功成功,MessageBoxButtons.OK,MessageBoxIcon.Information);catch MessageBox.Show(修改员工信息错。修改员工信息错。,错误错误,MessageBoxButtons.OK,MessageBoxIcon.Error);this.DialogResult=DialogResult.None;finally cmdUpdateEmp.Connection.Close();第20页/共22页227.6 实验实验n n上机完成任务7,主要是以下内容:n n在任务在任务6 6的基础上,在的基础上,在“EmployeeManagementEmployeeManagement”项目中设计项目中设计“修改员工信息修改员工信息”窗体。窗体。n n使用使用SqlCommandSqlCommand对象和对象和ParametersParameters对象,在对象,在“修改员工窗体修改员工窗体”时读取特定员工信息在窗体相时读取特定员工信息在窗体相应控件上显示。应控件上显示。n n使用使用SqlCommandSqlCommand对象和对象和ParametersParameters对象,在单对象,在单击击“修改修改”按钮时,将修改过的信息保存到数按钮时,将修改过的信息保存到数据库。据库。n n完成实验7实验报告。第21页/共22页
展开阅读全文