private void returnBtn_Click(object sender, EventArgs e) { var dmTable = OfflineDataControl.GetDmDatatable(kkno, skno); classBriefcase = BriefcaseControl.GetBriefcase(kkno); if (isRollCalling) { foreach (var student in RollCallControl.CopyOfStudentList) { var dmTableRows = dmTable.Select(string.Format("XSID = '{0}'", student.StudentId)); if (!dmTableRows.Any()) { continue; } student.RollCallStatus = Convert.ToInt16(dmTableRows.First()["DKZT"]); if (dmTableRows.First()["DMSJ1"] != DBNull.Value) // 如果点名时间1不为空的话 { student.ArriveTime = Convert.ToDateTime(dmTableRows.First()["DMSJ1"]); } } Student.DmTable = dmTable; Student.ClassBriefcase = classBriefcase; } Close(); }
/// <summary> /// 刷新第三个标签页中Gridview的显示状态.(进行绑定操作) /// 需要操作界面中的控件 所以讲函数放在了这里. /// </summary> /// <param name="skno">上课编号</param> private void dp_BindDataSourceForThirdClassStatusGridView(long skno) { var classInfoDatatable = OfflineDataControl.GetClassInfoTable(skno); // 获取ClassInfo表 classInfoDatatable.DefaultView.Sort = "上课日期 DESC"; // 按照日期 降序排序 rollCallingDetailGview3.DataSource = classInfoDatatable; // 绑定刚才得到的datatable }
/// <summary> /// 刷新第一个标签页中Gridview的显示状态. /// </summary> /// <param name="kkno">上课编号</param> private void dp_BindDataSourceForFirstClassStatusGridView(long kkno) { var classInfoDatatable = OfflineDataControl.GetClassInfoTable(kkno); classInfoDatatable.DefaultView.Sort = "上课日期 DESC"; classInfoGview1.DataSource = classInfoDatatable; }
/// <summary> /// 绑定第三个标签页左上角的Listbox的数据源. /// 该函数可以用于刷新第三个标签页的显示. /// </summary> private void dp_BindDataSourceForThirdClassListBox( ) { var dpCourseInfoDictionary = OfflineDataControl.GetCourseInfoDictionary(); courseListLbox3.DataSource = new BindingSource(dpCourseInfoDictionary, null); courseListLbox3.DisplayMember = "Value"; //设置显示字段 courseListLbox3.ValueMember = "Key"; //设置值字段 }
private void changeToLeaveEarly_Click(object sender, EventArgs e) { //先把Briefcase找出来 //classBriefcase = BriefcaseControl.GetBriefcase (kkno); //然后把当前的学号找出来 var studentId = Convert.ToString(studentsGridView.SelectedRows.First().Cells["学号"].Value); //然后更改当前的上课状态 显示的上课状态哦 dp_ChangeDisplayStatus(sender); //然后获取点名表 var dmTable = OfflineDataControl.GetDmDatatable(kkno, skno); //改点名表里的记录 这里改的就是数据了. OfflineDataControl.ChangeDmRecord(ref dmTable, studentId, 2, DateTime.Now, 1); //存点名表. BriefcaseControl.SaveDmTable(classBriefcase, dmTable); }
/// <summary> /// 手动更改签到状态 /// </summary> /// <param name="kkno">开课编号</param> /// <param name="skno">上课编号</param> /// <param name="isRollCalling">是否正在签到</param> public ViewStudentsForm(long kkno, long skno, bool isRollCalling) { InitializeComponent(); this.skno = skno; this.kkno = kkno; var dmTable = OfflineDataControl.GetDmDatatable(kkno, skno); this.isRollCalling = isRollCalling; // 是否正在签到 if (dmTable == null) { // 判断获取到的点名表是否为空 //如果为空 则显示出上课编号和开课编号 MsgBox.ShowMsgBoxDialog(string.Format("数据有误 请将以下信息提供给维护人员:\n" + "上课编号:{0}\n" + "开课编号:{1}", skno, kkno)); Close(); return; } var dmDisplayTable = OfflineDataControl.DmtableToDisplayTable(dmTable); studentsGridView.DataSource = dmDisplayTable; classBriefcase = BriefcaseControl.GetBriefcase(kkno); //调用一个或者几个函数函数 该函数应该: //1.传入 kkno 和 skno 返回该堂课的点名表 //2.传入kkno和datatable 可以正常写入briefcase. //指纹点名的时候也应该这样. //这些函数应该在OfflineDataControl中. }
/// <summary> /// 当指纹仪找到这个人的时候,程序需要调用List中的对象的该函数来进行签到操作. /// 将签到时间传进来 该函数会自己判断是否迟到 并写入Briefcase中. /// </summary> /// <param name="arriveTime">签到时间</param> public void SignIn(DateTime arriveTime) { var isLate = (arriveTime > ExpectedArriveTime); //判断是否迟到 并将到课状态更改成指定的状态 RollCallStatus = (short)(isLate ? 1 : 0); ArriveTime = arriveTime; /****************************************************************************************************************************/ //把标记该门课的表取出来 //var classBriefcase = BriefcaseControl.GetBriefcase(kkno); //然后获取点名表 //var dmTable = OfflineDataControl.GetDmDatatable ( kkno, skno ); //2015年5月8日 效率问题, 这里的从硬盘中取表操作已经被替换了. 如果需要拿Briefcase和点名表,请直接去Student.Dmtable和Student.ClassBriefcase中取. /**************************************************************************************************************************/ //改点名表里的记录 这里改的就是数据了.注意 这里改的是Student中的静态变量. OfflineDataControl.ChangeDmRecord(ref DmTable, StudentId, RollCallStatus, arriveTime, RollCallTimes); //存点名表.注意 这里改的是Student中的静态变量. BriefcaseControl.SaveDmTable(ClassBriefcase, DmTable); }
private void radButton1_Click_1(object sender, EventArgs e) { var selectedproperty = (KeyValuePair <long, string>)coursesListBox1.SelectedItem; // 获取已经选择的项目 if (selectedproperty.Key == -1) //判断是否有数据 { MsgBox.ShowMsgBoxDialog("没有数据"); } var rollCallingDetailRow = classInfoGview1.SelectedRows[0]; var kkno = selectedproperty.Key; var skno = Convert.ToInt64(rollCallingDetailRow.Cells["上课编号"].Value); var ydSkdate = Convert.ToString((rollCallingDetailRow.Cells["上课日期"].Value)); var kkname = Convert.ToString(selectedproperty.Value); //验证离线密码 var offlineVerifyResault = BriefcaseControl.VerifyOfflinePasswd(kkno); if (!offlineVerifyResault) { MsgBox.ShowMsgBoxDialog("验证口令失败"); return; } // 如果验证不通过 则提示密码错误 并返回 什么都不做. //todo:指纹点名的业务逻辑在这里编写即可 需要从界面里带出去的东西:1.上课编号2.课程编号 3.实际上课时间 //把预定上课时间传出去 var getRollCallTimeForm = new SetTimeForm(Convert.ToDateTime(ydSkdate)); var getRollCallTimeResault = getRollCallTimeForm.ShowDialog(); // 显示设置时间窗口 if (getRollCallTimeResault == DialogResult.Cancel) // 如果点击了返回 那么就不要再往下走了. { return; } var actualRollCallTime = getRollCallTimeForm.GetActualRollCallTime(); var skrecordList = OfflineDataControl.GetSktable(kkno); // 将来需要把这个拿来更新上课表 //var skrecord = (from c in skrecordList where c.SKNO == skno select c).First (); // linq 完了以后把第一条记录取出来(一共就有一条记录.) //FindIndex(a => a.SKNO == (long) sktableRow["SKNO"]) var skrecordIndex = skrecordList.FindIndex(a => a.SKNO == skno); var skrecord = skrecordList[skrecordIndex]; skrecord.SKZT = 3; skrecord.DMFS = 1; skrecord.SKDATE = actualRollCallTime; OfflineDataControl.SaveSkTable(skrecordList, kkno); // 存上课表 courseNameLbl2.Text = kkname; // 课程名称 label内容 expectedTeachingTimeLbl.Text = ydSkdate; // 预定上课时间 label内容 teacherNameLbl2.Text = teacherNameLbl1.Text; // 教师姓名 label内容 actualTeachingTimeLbl.Text = actualRollCallTime.ToString("f"); //实际上课时间内容 var studentList = RollCallControl.Init(kkno, skno, actualRollCallTime); //对于RollCallControl来说 这个委托是用来更新界面的.具体怎么更新界面他不用管 所以不用改名 var showStudentInformationDelegate = new RollCallControl.UpdateUserInterfaceDelegate(ShowStudentInformation); RollCallControl.StartRollCall(studentList, showStudentInformationDelegate); mainPageView.SelectedPage = startRollCallPage; dp_ResetMainForm(); dp_EnableRollcallButtons(); rollCallStudentListGv.DataSource = RollCallControl.CopyOfStudentList; //todo:接下来要做的事情: //1.打开指纹仪 //2.识别出来的号码拿出来 放到Student List里查 查完了把Student对象扔到界面委托里显示. //3.用while(bool变量)控制结束签到 //4.结束签到的时候直接closeUsb即可 //写一个函数 传入更新界面的Delegate 该函数需要在一个新的线程里编写. }