private DataTable backupDisplayTable; //显示表用于显示的datatable的备份

        public ManualRollCall(Briefcase _classBriefcase, long _jieci, DataTable dmTable, DateTime RollcallTime)
        {
            InitializeComponent();
            ///////////////////////////////////////
            this.classBriefcase = _classBriefcase; //本门课的briefcase(通过该窗口的构造函数传进来)

            this.jieci = _jieci;                   //节次编号

            _dmTable = dmTable;

            _rollCallTime = RollcallTime;
            //以上语句在为成员赋值 不要管啦////////////////////
            Briefcase propertieBriefcase =
                new FileBriefcase
                    (Properties.Settings.Default.PropertiesBriefcaseFolder, true); //打开propertiesBriefcase,用于获取班级表

            bjTable = propertieBriefcase.FindTable("ClassNameTable");              //班级表

            xkTable = classBriefcase.FindTable("XKTABLE_VIEW1");                   //拉出选课表 获取学生信息
        }
Example #2
0
        /// <summary>
        /// 刷新上课表 可用于下载数据时的操作.
        /// </summary>
        /// <param name="courseBriefcase">skno对应的Briefcase</param>
        /// <param name="sktableList">上课表对应的List</param>
        public static void RefreshClassInfoTable(FileBriefcase courseBriefcase, IEnumerable <SKTABLE_07_VIEW> sktableList)
        {
            var classInfoTable = courseBriefcase.FindTable("ClassInfo");

            classInfoTable.Rows.Clear();

            //以下注释的代码作为参考用.
            //courseInfoTable.Columns.Add ("上课编号", typeof (string));

            //courseInfoTable.Columns.Add ("上课日期", typeof (string));

            //courseInfoTable.Columns.Add ("上课状态", typeof (string));

            foreach (var sktable07Viewro in sktableList)
            {
                var viewro = sktable07Viewro;                                              //resharper说要这么写

                var classInfoRow = classInfoTable.NewRow();                                //新建一行

                classInfoRow["上课编号"] = viewro.SKNO.ToString(CultureInfo.InvariantCulture); //指定这一行的上课编号

                classInfoRow["上课日期"] = viewro.YDSKDATE.ToString();                         //指定这一行的上课日期

                if (viewro.SKZT == 0)                                                      //将上课状态转换成文字

                {
                    classInfoRow["上课状态"] = "未签到";
                }
                else
                {
                    classInfoRow["上课状态"] = "已签到";
                }

                classInfoTable.Rows.Add(classInfoRow); //将这一行加到datatable里
            }

            courseBriefcase.AddTable(classInfoTable); //将datatable加到briefcase里

            courseBriefcase.WriteBriefcase();
        }
        /// <summary>
        /// 通过上课编号获取每节课的签到情况信息.该信息保存在每节课对应的Briefcase中的ClassInfo中
        /// </summary>
        /// <param name="kkno">开课编号</param>
        /// <returns>ClassInfo表 里面包含着每节课的签到信息.</returns>
        public static DataTable GetClassInfoTable(long kkno)
        {
            if (!File.Exists(GlobalParams.BriefcasePath + kkno + @".daBriefcase"))
            {
                var emptyClassInfoTable = new DataTable("ClassInfo");
                // 里面应该存放每节课的信息. 该datatable应该放在对应课程的briefcase中 这个表是空的.将会在DataDownloadControl中对此表进行填充.

                emptyClassInfoTable.Columns.Add("上课编号", typeof(string));

                emptyClassInfoTable.Columns.Add("上课日期", typeof(string));

                emptyClassInfoTable.Columns.Add("上课状态", typeof(string));

                return(emptyClassInfoTable);
            }

            var courseBriefcase = new FileBriefcase(GlobalParams.BriefcasePath + kkno + @".daBriefcase", true);

            var classInfoTable = courseBriefcase.FindTable("ClassInfo");

            return(classInfoTable);
        }
Example #4
0
        private bool StartDownloadData(JSANDKKVIEWRO kktable05, string offlinePasswd) // 一门开课课程
        {
            ProgressHelper.StartProgressThread();                                     // 开始显示进度条
            Briefcase newBriefcase = new FileBriefcase(string.Format(
                                                           GlobalParams.CurrentOfflineDataFile,
                                                           kktable05.KKNO.ToString())); // 在内存中新建一个Briefcase 名字为该课程的开课编号

            ProgressHelper.SetProgress(5);                                              // 进度 百分之5
            DataTable classRecordTable = null;                                          // 一张上课表 对应每一节课
            DataRow   classRecordRow   = null;

            classRecordTable = new DataTable("ClassStatus");
            if (!classRecordTable.Columns.Contains("Table编号")) //这里算是一个BUG. 需要重新写.
            {
                classRecordTable.Columns.Add("Table编号", type: Type.GetType("System.String"));
                classRecordTable.Columns.Add("课次", type: Type.GetType("System.String"));
                classRecordTable.Columns.Add("签到情况", type: Type.GetType("System.String"));
                classRecordTable.Columns.Add("离线数据提交情况", type: Type.GetType("System.String"));
            }
            newBriefcase.Properties.Add(GlobalParams.PropertiesLastModified,
                                        DateTime.Now.ToString()); // 在briefcase中增加一个属性 用于记录最后一次更改的日期

            newBriefcase.Properties.Add(GlobalParams.PropertiesTeacherName,
                                        Properties.Settings.Default.UserName); //增加一个属性 用于记录教师姓名

            ProgressHelper.SetProgress(6);                                     // 进度 百分之6

            newBriefcase.Properties.Add(GlobalParams.PropertiesTeacherID,
                                        Properties.Settings.Default.UserId); // 增加一个属性 用于记录教师工号

            newBriefcase.Properties.Add(GlobalParams.PropertiesPasswd,
                                        offlinePasswd);//用于记录离线密码.

            newBriefcase.Properties.Add(GlobalParams.PropertiesClassName,
                                        kktable05.KKNAME);//增加一个属性 用于记录开课名称

            newBriefcase.Properties.Add(GlobalParams.PropertiesLastCheckin,
                                        "1");                       //用于记录最后一次考勤的节次

            ProgressHelper.SetProgress(10);                         //进度 百分之10
            newBriefcase.Properties.Add(GlobalParams.PropertiesTotalStudentNumber,
                                        kktable05.XXRS.ToString()); //增加一个属性 用于记录选学人数

            IQueryable <XKTABLE_VIEWRO> xktableView1s =
                from c in
                remoteDataAdapter.GetTable <XKTABLE_VIEWRO>() where c.KKNO == kktable05.KKNO
                select c;                   //构造LINQ语句 (选课表 XKTABLE_VIEWRO 学生信息)

            ProgressHelper.SetProgress(20); //进度 百分之15

            newBriefcase.AddTable(
                OfflineHelper.TableListToDataTable
                    (xktableView1s.ToList(), "XKTABLE_VIEW1"));
            // 将XKTABLE_VIEWRO(学生信息)放在briefcase里

            IQueryable <SKTABLE_07_VIEW> sktableView1s =
                from c in
                remoteDataAdapter.GetTable <SKTABLE_07_VIEW>()
                where c.KKNO == kktable05.KKNO && c.SKDATE > new DateTime(2014, 10, 14)
                select c;//SKTABLE_07_view为教师的上课表.教师选择完课程之后需要选择节次.

            //节次的来源即为该表. 一节课一条记录

            //将大于10月14号的数据下载下来 10月14日之后的数据都是正常的数据.
            //进度 百分之二十
            newBriefcase.AddTable(OfflineHelper.TableListToDataTable(sktableView1s.ToList(),
                                                                     "SKTABLE")); // 下载SKTABLE_07_VIEW 并将其添加进briefcase中 里面包含了课程的信息
            //百分之20
            ProgressHelper.SetProgress(20);

            foreach (var sktableView1 in sktableView1s)
            {                                                   //开始遍历上课表,并根据SKNO(上课编号) 获取每一节课对应的DMTABLE_08_NOPIC_VIEW
                Properties.Settings.Default.ProgressValue += 2; // 进度指示

                IQueryable <DMTABLE_08_NOPIC_VIEW> dmtable08S = // 构造LINQ语句 此处算法应改进
                                                                from c in
                                                                remoteDataAdapter.GetTable <DMTABLE_08_NOPIC_VIEW>() where  c.SKNO == sktableView1.SKNO
                                                                select c;//每一节课对应一张点名表

                newBriefcase.AddTable(
                    OfflineHelper.TableListToDataTable(dmtable08S.ToList(),
                                                       sktableView1.SKNO.ToString()));//将点名表加入briefcase

                classRecordRow = classRecordTable.NewRow();
                //在课程记录表中新建一行记录. 包含该节课是否已经签到的标记

                classRecordRow[0] = sktableView1.SKNO.ToString();   //上课编号
                classRecordRow[1] = sktableView1.SKDATE.ToString(); //上课时间
                if (sktableView1.SKZT == 0)                         //判断考勤状态 若已经完成考勤,则该堂课不能进行考勤工作.
                {
                    classRecordRow[2] = GlobalParams.DidNotSigned;
                    classRecordRow[3] = GlobalParams.NotSubmitYet;
                }
                else
                {
                    classRecordRow[2] = GlobalParams.Signed;
                    classRecordRow[3] = GlobalParams.Submitted;
                }
                classRecordTable.Rows.Add(classRecordRow); //将刚创建的这一行添加到表中.
            }
            ProgressHelper.SetProgress(80);                // 进度条

            newBriefcase.AddTable(classRecordTable);       // 将用于记录每节课的表放在briefcase中

            newBriefcase.WriteBriefcase();                 //保存briefcase到硬盘上

            Briefcase propertiesBriefcase =
                new FileBriefcase(GlobalParams.PropertiesBriefcaseName, true);//true代表提前读取数据

            DataTable propertiesTable =
                propertiesBriefcase.FindTable("PropertiesTable");
            //本地的打开properties表 向其中添加一条记录 properties表中包含了所有的已经离线的开课记录

            DataRow propertiesRow = null;                            //创建一个记录变量

            propertiesRow = propertiesTable.NewRow();                //new出来一条记录

            propertiesRow[0] = kktable05.KKNO.ToString();            //开课编号

            propertiesRow[1] = Properties.Settings.Default.UserName; //用户名

            propertiesRow[2] = kktable05.KKNAME;                     //开课名称

            DataRow[] dataRows =
                propertiesTable.Select("开课编号 = '" + kktable05.KKNO.ToString() + "'");
            //判断该课程是否已经添加进propertiestable中

            if (dataRows.Length >= 1) // propertiestable已经有了该课程
            {
                foreach (var dataRow in dataRows)
                {
                    dataRow.Delete();//删除该课程
                }

                propertiesTable.Rows.Add(propertiesRow);//添加该课程(更新)
            }
            else
            {
                propertiesTable.Rows.Add(propertiesRow);        //添加该课程(新增)
            }
            ProgressHelper.SetProgress(90);                     //设置进度条
            propertiesBriefcase.RemoveTable("PropertiesTable"); //移除propertiestable(必要的操作)

            propertiesBriefcase.AddTable(propertiesTable);      //添加propertiestable

            propertiesBriefcase.WriteBriefcase();               //写入更改

            ProgressHelper.SetProgress(100);                    //进度条显示100%

            ProgressHelper.StopProgressThread();                //停止显示进度条窗口

            ProgressHelper.SetProgress(0);                      //重置进度条窗口

            MessageBox.Show(string.Format("操作成功 课程 【{0}】 已被下载 ",
                                          kktable05.KKNAME));//弹窗提示

            return(true);
        }