protected virtual void OnSetDataSource(EventArgs e)
 {
     if (SetDataSource != null)
     {
         SetDataSource?.Invoke(this, e);
     }
 }
Esempio n. 2
0
        public void getDateTable()
        {
            //初始化记录变量
            string sdwEnrollNumber = ""; //考勤记录的用户ID
            int    idwVerifyMode   = 0;  //验证方式,0代表密码,1代表指纹,2代表ID卡
            int    idwInOutMode    = 0;  //考勤状态,255代表无考勤状态
            int    idwYear         = 0;  //年
            int    idwMonth        = 0;  //月
            int    idwDay          = 0;  //日
            int    idwHour         = 0;  //时
            int    idwMinute       = 0;  //分
            int    idwSecond       = 0;  //秒
            int    idwWorkcode     = 0;  //记录的Workcode值

            //实例化委托
            objUpdataLbl = new UpdataLbl(LblState);
            objStartPrg  = startPrg;//实例Prg委托

            #region 创建DataTable表

            //创建一个名为"AttLogTable"的DataTable表
            DataTable AttLogTable = new DataTable();

            //设定列数据
            AttLogTable.Columns.Add("ClockId", typeof(int));
            AttLogTable.Columns.Add("MachineId", typeof(int));
            AttLogTable.Columns.Add("VerifyMode", typeof(int));
            AttLogTable.Columns.Add("InOutMode", typeof(int));
            AttLogTable.Columns.Add("ClockRecord", typeof(string));
            //清空DataTable行数据
            AttLogTable.Rows.Clear();

            #endregion

            //异步修改lbl值
            BeginInvoke(objUpdataLbl, "正在下载记录……");

            while (axCZKEM1.SSR_GetGeneralLogData(iMachineNumber, out sdwEnrollNumber, out idwVerifyMode,
                                                  out idwInOutMode, out idwYear, out idwMonth, out idwDay, out idwHour, out idwMinute,
                                                  out idwSecond, ref idwWorkcode)) //从内存取得记录
            {
                cNumber++;                                                         //循环记数,当前开写入的记录进度数
                BeginInvoke(objStartPrg, cNumber);                                 //异步执行,实现进度条更新进度

                BeginInvoke(objUpdataLbl, cNumber + "/" + iValue);                 //异步修改lbl值

                //把记录循环写入DataTable表
                DataRow dr = AttLogTable.NewRow();
                dr[0] = sdwEnrollNumber;
                dr[1] = iMachineNumber;
                dr[2] = idwVerifyMode;
                dr[3] = idwInOutMode;
                dr[4] = idwYear.ToString() + "-" + idwMonth.ToString() + "-" + idwDay.ToString() + " " + idwHour.ToString()
                        + ":" + idwMinute.ToString() + ":" + idwSecond.ToString();
                AttLogTable.Rows.Add(dr);
            }
            objSetDataSource = dgvDataSource;           //实例委托
            BeginInvoke(objSetDataSource, AttLogTable); //更新dgvAttLog

            //异步修改lbl值
            BeginInvoke(objUpdataLbl, "下载完毕!正在筛选记录……");

            #region 数据批量对比去重

            //读取数据库已有数据
            DataTable PastLogTable = objAttRecordService.GetAllOriginalLog().Tables[0];

            //求差集结果,
            IEnumerable <DataRow> drResult = AttLogTable.AsEnumerable().Except(PastLogTable.AsEnumerable(), DataRowComparer.Default);

            //处理空结果的异常
            if (drResult.Count() > 0)//如果序列元素的个数>0,则写入数据,否则跳过
            {
                //接收不重复的数据
                DataTable dtResult = drResult.CopyToDataTable();
                //批量写入原始记录表
                SQLHelper.UpdataByBulk(dtResult, "OriginalLog");
                //批量写入记录备份表
                SQLHelper.UpdataByBulk(dtResult, "OriginalLog_Bak");

                //异步修改lbl值
                BeginInvoke(objUpdataLbl, "数据保存成功!");
            }

            #endregion

            //清空dt对象
            AttLogTable  = null;
            PastLogTable = null;
            //异步修改lbl值
            BeginInvoke(objUpdataLbl, "数据保存成功!");
        }