哈喽,你好啊,我是雷工!
今天接着学习人员管理系统系列,前面实现了打开修改学员信息界面,这里接着实现人员信息的修改。
以下为练习笔记。
01 效果演示在修改界面修改人员信息,然后点击【确认修改】按钮,将修改的人员信息更新到数据库,并在列表中更新显示更新后的信息。
02 实现步骤2.1、修改方法
首先在PeopleServer中编写修改人员的方法
/// <summary>/// 修改人员对象/// </summary>/// <param name="objPeople"></param>/// <returns></returns>/// <exception cref="Exception"></exception>public int ModifyPeople(People objPeople){ StringBuilder sqlBuilder = new StringBuilder(); sqlBuilder.Append("update People set PeopleName='{0}',Gender='{1}',Birthday='{2}',"); sqlBuilder.Append("IdNumber={3},Age={4},PhoneNumber='{5}',Address='{6}',"); sqlBuilder.Append("CardNO='{7}',GroupId={8},PeoImage='{9}'"); sqlBuilder.Append(" where PeopleId={10}"); string sql = string.Format(sqlBuilder.ToString(), objPeople.PeopleName, objPeople.Gender, objPeople.Birthday.ToString("yyyy-MM-dd"), objPeople.IdNumber, objPeople.Age, objPeople.PhoneNumber, objPeople.Address, objPeople.CarNo, objPeople.GroupId, objPeople.PeoImage,objPeople.PeopleId); try { return SQLHelper.Update(sql); } catch(Exception ex) { throw new Exception("修改人员信息时数据访问发生异常:"+ex.Message); }}2.2、选择照片
确认修改前的准备工作,是选择照片按钮的功能和添加人员中选择照片的按钮功能是一样的,所以写法也一样,这里可以直接把代码复制过来。
代码如下:
//选择照片private void btnChoseImage_Click(object sender, EventArgs e){ OpenFileDialog objFileDialog = new OpenFileDialog(); DialogResult result = objFileDialog.ShowDialog(); if (result == DialogResult.OK) { this.pbPeo.Image = Image.FromFile(objFileDialog.FileName); }}2.3、 数据验证
在点击【确认修改】后首先需要进行数据验证,这里验证和添加人员时的验证基本一致,只是在考勤卡号和身份证号验证时有所不同。
①身份证号验证
添加人员时验证身份证号是直接查询数据库中是否存在,现在是修改,若身份证号项未修改或者修改成了与其他人员重复的身份证号时,肯定无法通过之前的验证方式进行验证。
这里可以通过验证当前人员编号外的编号所对应的身份证与当前人员身份证号是否重复。
在PeopleServer中编写验证身份证的方法。
代码如下:
/// <summary>/// 判断修改后的身份证号是否与其他人员重复/// </summary>/// <param name="NewPeoIdNo">修改后的身份证号</param>/// <param name="peopleId">当前人员的编号</param>/// <returns></returns>public bool IsIdNoExisted(string NewPeoIdNo,string peopleId){ string sql = string.Format("select count(*)from Peoples where PeopleIdNo={0} and PeopleId<>peopleId", NewPeoIdNo); int result = Convert.ToInt32(SQLHelper.GetSingleResult(sql)); if (result == 1) return true; else return false;}数据验证时调用方法:
//验证修改的身份证号是否与其他人员重复if (objPeopleServer.IsIdNoExisted(this.txtPeopleIdNo.Text.Trim(),this.txtPeopleId.Text.Trim())){ MessageBox.Show("该身份证号与其他人员身份证号重复!", "雷工提示"); this.txtPeopleIdNo.SelectAll(); this.txtPeopleIdNo.Focus(); return;}②考勤卡号验证
考勤卡号的验证思路与方法与身份账号的验证一样,此处不再赘述,感兴趣的可以自己查看源码。
2.4、封装对象
封装对象和添加人员时基本一致,就是在最后增加上PeopleId的封装。
代码如下:
People people = new People(){ PeopleName = this.txtPeopleName.Text.Trim(), Gender = this.rdoMale.Checked ? "男" : "女", Birthday = Convert.ToDateTime(this.dtpBirthday.Text), IdNumber = this.txtPeopleIdNo.Text.Trim(), PhoneNumber = this.txtPhoneNumber.Text.Trim(), Address = this.txtAddress.Text.Trim(), GroupId = Convert.ToInt32(this.cboGroupName.SelectedValue), GroupName = this.cboGroupName.Text,//为了列表展示 Age = DateTime.Now.Year - Convert.ToDateTime(this.dtpBirthday.Text).Year, CarNo = this.txtCarNo.Text.Trim(), PeoImage = this.pbPeo.Image != null ? new Common.SerializeObjectToString().SerializeObject(this.pbPeo.Image) : "", PeopleId=Convert.ToInt32(this.txtPeopleId.Text.Trim())};这里人员编号在界面窗体有显示可以这样封装,实际项目中很多情况会遇到编号并不在界面显示但是封装时需要封装的情况,这时候可以创建成员变量存储要封装的编码。
2.5、提交修改
封装完以后就可以提交修改了,提交修改添加到try catch中
代码如下:
try{ if (objPeopleServer.ModifyPeople(people) == 1) { MessageBox.Show("修改成功!", "雷工提示"); this.DialogResult = DialogResult.OK; this.Close(); }}catch (Exception ex){ MessageBox.Show(ex.Message,"雷工提示");}注:
在VS中生成try-catch代码块的快捷键是输入try,然后连续按两次Tab
2.6、同步刷新
为了使修改后的结果同步刷新到列表中,这里使用的方式是将查询成功的结果返回,然后触发了查询事件,该方式适合少量数据时,实际项目中更新不会再查一次数据库,而是将修改信息直接在显示层面做更新展示。
管理界面FrmPeopleManage的修改人员信息按钮事件代码优化为:
//修改人员信息private void btnEidt_Click(object sender, EventArgs e){ if(this.dgvPeopleList.RowCount==0) { MessageBox.Show("无任何要修改的人员信息!", "雷工提示"); return; } if(this.dgvPeopleList.CurrentRow==null) { MessageBox.Show("请选中要修改的人员信息!", "雷工提示"); } //获取编号 string peopleId = this.dgvPeopleList.CurrentRow.Cells["PeopleId"].Value.ToString(); People objPeople = objPeoServer.GetPeopleById(peopleId); //显示人员信息窗体 FrmEditPeople objFrm = new FrmEditPeople(objPeople); if(objFrm.ShowDialog()==DialogResult.OK) { //同步刷新 btnQuery_Click(null, null); }}03 调试异常异常①:
索引(从零开始)必须大于或等于零,且小于参数列表的大小。
原因:
sqlBuilder.Append定义的{0}-{10},后面的参数少了一个,增加后正常;
异常②:
修改人员信息时数据访问发生异常:执行Update发生异常:“女”附近有语法错误。
原因:
当出现类似附近有语法错误时大概率是SQL语句拼写有问题,检查修正后正常。
04 后记以上为修改人员信息功能的实现,在测试中还总出现修改超时的情况,结果重启了下电脑正常了,
有感兴趣的小伙伴可以联系小编获取源码进行学习,也可以和小伙伴在交流群内探讨。