protected void btnSave_Click(object sender, ImageClickEventArgs e)
        {
            DataTable dataTable = BindGrid();

            if (txtMET2.Text == "")
            {
                txtMET2.Text = "1";
            }

            if (!rbnSubject1.Checked && !rbnSubject2.Checked)
            {
                SessionSet.PageMessage = "请选择考试科目类别!";
                return;
            }

            RandomExamBLL examBLL = new RandomExamBLL();

            RailExam.Model.RandomExam exam = new RailExam.Model.RandomExam();

            string strID        = string.Empty;
            string strMode      = ViewState["mode"].ToString();
            string strStartMode = ViewState["startmode"].ToString();

            RandomExamTrainClassHaBLL objTrainClassBll = new RandomExamTrainClassHaBLL();

            string[] strPost         = hfPostID.Value.Split(',');
            string   strErrorMessage = "";

            if (strMode == "Insert")
            {
                if (chkHasTrainClass.Checked)
                {
                    foreach (DataRow dr in dataTable.Rows)
                    {
                        for (int i = 0; i < strPost.Length; i++)
                        {
                            IList <RandomExamTrainClassHa> objList =
                                objTrainClassBll.GetRandomExamTrainClassCount(dr["TrainClassID"].ToString(),
                                                                              rbnSubject1.Checked?1:2,
                                                                              Convert.ToInt32(strPost[i]));
                            if (objList.Count > 0)
                            {
                                strErrorMessage = "培训班“" + dr["TrainClassName"] + "”的考试科目“" + (rbnSubject1.Checked ? "安全" : "理论") + "”已新增当前所选职名的试卷!";
                            }
                        }
                    }
                }

                if (strErrorMessage != "")
                {
                    SessionSet.PageMessage = strErrorMessage;
                    return;
                }

                if (DateTime.Parse(dateBeginTime.DateValue.ToString()) < DateTime.Today)
                {
                    SessionSet.PageMessage = "开始时间不能小于当前日期!";
                    return;
                }

                exam.CategoryId   = int.Parse(hfCategoryId.Value);
                exam.ExamName     = txtExamName.Text;
                exam.Memo         = txtMemo.Text;
                exam.CreatePerson = PrjPub.CurrentLoginUser.EmployeeName;
                exam.ExamModeId   = 1;
                exam.PassScore    = Convert.ToDecimal(txtPassScore.Text);

                if (rbnExamMode1.Checked)
                {
                    exam.IsComputerExam = true;
                }
                else
                {
                    exam.IsComputerExam = false;
                }

                if (rbnStartMode1.Checked)
                {
                    exam.StartMode = 1;
                }
                else
                {
                    exam.StartMode = 2;
                }

                if (rbnStyle1.Checked)
                {
                    exam.ExamStyle = 1;
                }
                else
                {
                    exam.ExamStyle = 2;
                }

                exam.IsAutoScore    = chAutoScore.Checked;
                exam.CanSeeAnswer   = chSeeAnswer.Checked;
                exam.CanSeeScore    = chSeeScore.Checked;
                exam.IsPublicScore  = chPublicScore.Checked;
                exam.IsUnderControl = chUD.Checked;
                exam.MaxExamTimes   = int.Parse(txtMET2.Text);
                if (rbnSubject1.Checked)
                {
                    exam.MinExamTimes = 1;
                }
                else if (rbnSubject2.Checked)
                {
                    exam.MinExamTimes = 2;
                }

                exam.BeginTime        = DateTime.Parse(dateBeginTime.DateValue.ToString());
                exam.EndTime          = DateTime.Parse(dateEndTime.DateValue.ToString());
                exam.ExamTypeId       = 1;
                exam.CreateTime       = DateTime.Now;
                exam.Description      = txtDescription.Text;
                exam.ExamTime         = int.Parse(txtExamTime.Text);
                exam.StatusId         = 1;
                exam.PostID           = hfPostID.Value;
                exam.TechnicianTypeID = Convert.ToInt32(ddlTech.SelectedValue);
                exam.IsGroupLeader    = Convert.ToInt32(ddlIsGroup.SelectedValue);

                exam.AutoSaveInterval = 0;
                exam.OrgId            = PrjPub.CurrentLoginUser.StationOrgID;
                exam.HasTrainClass    = chkHasTrainClass.Checked;

                int id = examBLL.AddExam(exam);
                strID = id.ToString();

                //当考试来源为培训班时,需自动添加考生。
                if (chkHasTrainClass.Checked)
                {
                    foreach (DataRow dr in dataTable.Rows)
                    {
                        RandomExamTrainClassHa obj = new RandomExamTrainClassHa();
                        obj.RandomExamID = Convert.ToInt32(strID);
                        obj.ArchivesID   = dr["TrainClassID"].ToString();
                        objTrainClassBll.AddRandomExamTrainClass(obj);
                    }
                    //ClientScript.RegisterStartupScript(GetType(),
                    //    "jsSelectFirstNode",
                    //    @"SaveArrange(" + strID + ",'" + strStartMode + "','" + strMode + "');",
                    //    true);

                    string strClause = strID + "|" + strStartMode + "|" + strMode;
                    ClientScript.RegisterStartupScript(GetType(), "import", "inputCallback.callback('" + strClause + "');", true);
                }
                else
                {
                    Response.Redirect("RandomExamSubjectInfo.aspx?startmode=" + strStartMode + "&mode=" + strMode + "&id=" + strID);
                }
            }
            else if (strMode == "Edit")
            {
                strID = Request.QueryString.Get("id");

                if (chkHasTrainClass.Checked && (ViewState["TrainClass"].ToString() != hfTrainClassID.Value || ViewState["Subject"].ToString() != (rbnSubject1.Checked ? 1 : 2).ToString()))
                {
                    foreach (DataRow dr in dataTable.Rows)
                    {
                        for (int i = 0; i < strPost.Length; i++)
                        {
                            IList <RandomExamTrainClassHa> objList =
                                objTrainClassBll.GetRandomExamTrainClassCount(dr["TrainClassID"].ToString(),
                                                                              rbnSubject1.Checked ? 1 : 2,
                                                                              Convert.ToInt32(strPost[i]));
                            if (objList.Count > 0)
                            {
                                if (objList[0].RandomExamID.ToString() != strID)
                                {
                                    strErrorMessage = "培训班“" + dr["TrainClassName"] + "”的考试科目“" + (rbnSubject1.Checked ? "安全" : "理论") + "”已新增当前所选职名的试卷!";
                                }
                            }
                        }
                    }
                }

                if (strErrorMessage != "")
                {
                    SessionSet.PageMessage = strErrorMessage;
                    return;
                }

                if (DateTime.Parse(dateBeginTime.DateValue.ToString()) < DateTime.Today && ViewState["BeginTime"].ToString() != dateBeginTime.DateValue.ToString())
                {
                    SessionSet.PageMessage = "开始时间不能小于当前日期!";
                    return;
                }


                exam.ExamName     = txtExamName.Text;
                exam.Memo         = txtMemo.Text;
                exam.RandomExamId = int.Parse(strID);
                exam.ExamTime     = int.Parse(txtExamTime.Text);
                exam.ExamModeId   = 1;
                exam.PassScore    = Convert.ToDecimal(txtPassScore.Text);

                if (rbnExamMode1.Checked)
                {
                    exam.IsComputerExam = true;
                }
                else
                {
                    exam.IsComputerExam = false;
                }

                if (rbnStartMode1.Checked)
                {
                    exam.StartMode = 1;
                }
                else
                {
                    exam.StartMode = 2;
                }

                if (rbnStyle1.Checked)
                {
                    exam.ExamStyle = 1;
                }
                else
                {
                    exam.ExamStyle = 2;
                }
                exam.BeginTime = DateTime.Parse(dateBeginTime.DateValue.ToString());
                exam.EndTime   = DateTime.Parse(dateEndTime.DateValue.ToString());

                exam.IsAutoScore    = chAutoScore.Checked;
                exam.CanSeeAnswer   = chSeeAnswer.Checked;
                exam.CanSeeScore    = chSeeScore.Checked;
                exam.IsPublicScore  = chPublicScore.Checked;
                exam.IsUnderControl = chUD.Checked;
                exam.MaxExamTimes   = int.Parse(txtMET2.Text);
                if (rbnSubject1.Checked)
                {
                    exam.MinExamTimes = 1;
                }
                else if (rbnSubject2.Checked)
                {
                    exam.MinExamTimes = 2;
                }
                exam.ExamTypeId       = 1;
                exam.Description      = txtDescription.Text;
                exam.AutoSaveInterval = 0;
                exam.PostID           = hfPostID.Value;
                exam.TechnicianTypeID = Convert.ToInt32(ddlTech.SelectedValue);
                exam.IsGroupLeader    = Convert.ToInt32(ddlIsGroup.SelectedValue);

                RandomExamArrangeBLL objArrangeBll = new RandomExamArrangeBLL();
                //当是否为培训班改变或所选培训班改变时,需删除考试安排
                if (Convert.ToBoolean(ViewState["HasTrainClass"].ToString()) != chkHasTrainClass.Checked ||
                    ViewState["TrainClass"].ToString() != hfTrainClassID.Value || ViewState["PostID"].ToString() != hfPostID.Value)
                {
                    objArrangeBll.DeleteRandomExamArrangeByRandomExamID(Convert.ToInt32(strID));
                }

                if ((Convert.ToBoolean(ViewState["HasTrainClass"].ToString()) != chkHasTrainClass.Checked && !chkHasTrainClass.Checked) || ViewState["TrainClass"].ToString() != hfTrainClassID.Value)
                {
                    objTrainClassBll.DeleteRandomExamTrainClassByRandomExamID(Convert.ToInt32(strID));
                }

                exam.HasTrainClass = chkHasTrainClass.Checked;
                examBLL.UpdateExam(exam);
                examBLL.UpdateVersion(Convert.ToInt32(strID));

                if (chkHasTrainClass.Checked)
                {
                    if (ViewState["TrainClass"].ToString() != hfTrainClassID.Value || ViewState["PostID"].ToString() != hfPostID.Value)
                    {
                        foreach (DataRow dr in dataTable.Rows)
                        {
                            RandomExamTrainClassHa obj = new RandomExamTrainClassHa();
                            obj.RandomExamID = Convert.ToInt32(strID);
                            obj.ArchivesID   = dr["TrainClassID"].ToString();
                            objTrainClassBll.AddRandomExamTrainClass(obj);
                        }

                        //ClientScript.RegisterStartupScript(GetType(),
                        //"jsSelectFirstNode",
                        //@"SaveArrange(" + strID + ",'" + strStartMode + "','" + strMode + "');",
                        //true);

                        string strClause = strID + "|" + strStartMode + "|" + strMode;
                        ClientScript.RegisterStartupScript(GetType(), "import", "inputCallback.callback('" + strClause + "');", true);
                    }
                    else
                    {
                        Response.Redirect("RandomExamSubjectInfo.aspx?startmode=" + strStartMode + "&mode=" + strMode + "&id=" + strID);
                    }
                }
                else
                {
                    Response.Redirect("RandomExamSubjectInfo.aspx?startmode=" + strStartMode + "&mode=" + strMode + "&id=" + strID);
                }
            }
            else
            {
                strID = Request.QueryString.Get("id");
                Response.Redirect("RandomExamSubjectInfo.aspx?startmode=" + strStartMode + "&mode=" + strMode + "&id=" + strID);
            }
        }
        protected void FillPage(int nExamID)
        {
            RandomExamBLL examBLL = new RandomExamBLL();

            RailExam.Model.RandomExam exam = examBLL.GetExam(nExamID);

            if (exam != null)
            {
                ViewState["OrgID"] = exam.OrgId.ToString();

                if (ViewState["startmode"].ToString() == "Edit")
                {
                    if (exam.HasPaper)
                    {
                        Response.Write("<script>alert('该考试已生成试卷,不能被编辑!');window.close();</script>");
                    }
                }
                txtCategoryName.Text    = exam.CategoryName;
                hfCategoryId.Value      = exam.CategoryId.ToString();
                ddlType.SelectedValue   = exam.ExamTypeId.ToString();
                txtExamName.Text        = exam.ExamName;
                txtExamTime.Text        = exam.ExamTime.ToString();
                ViewState["BeginTime"]  = exam.BeginTime.ToString("yyyy-MM-dd HH:mm:ss");
                dateBeginTime.DateValue = exam.BeginTime.ToString("yyyy-MM-dd HH:mm:ss");
                dateEndTime.DateValue   = exam.EndTime.ToString("yyyy-MM-dd HH:mm:ss");
                txtPassScore.Text       = exam.PassScore.ToString();

                if (exam.IsComputerExam)
                {
                    rbnExamMode1.Checked = true;
                }
                else
                {
                    rbnExamMode2.Checked = true;
                }

                if (exam.StartMode == 1)
                {
                    rbnStartMode1.Checked = true;
                }
                else
                {
                    rbnStartMode2.Checked = true;
                }



                if (exam.MinExamTimes == 1)
                {
                    rbnSubject1.Checked = true;
                }
                else if (exam.MinExamTimes == 2)
                {
                    rbnSubject2.Checked = true;
                }
                ViewState["Subject"] = exam.MinExamTimes;

                txtMET2.Text             = exam.MaxExamTimes.ToString();
                chUD.Checked             = exam.IsUnderControl;
                chAutoScore.Checked      = exam.IsAutoScore;
                chSeeAnswer.Checked      = exam.CanSeeAnswer;
                chSeeScore.Checked       = exam.CanSeeScore;
                chPublicScore.Checked    = exam.IsPublicScore;
                txtDescription.Text      = exam.Description;
                txtMemo.Text             = exam.Memo;
                ddlIsGroup.SelectedValue = exam.IsGroupLeader.ToString();
                ddlTech.SelectedValue    = exam.TechnicianTypeID.ToString();
                hfPostID.Value           = exam.PostID;
                ViewState["PostID"]      = hfPostID.Value;

                PostBLL  postBLL   = new PostBLL();
                string[] strPostID = exam.PostID.Split(',');
                for (int i = 0; i < strPostID.Length; i++)
                {
                    if (i == 0)
                    {
                        txtPost.Text = postBLL.GetPost(Convert.ToInt32(strPostID[i])).PostName;
                    }
                    else
                    {
                        txtPost.Text = txtPost.Text + "," + postBLL.GetPost(Convert.ToInt32(strPostID[i])).PostName;
                    }
                }
                hfPostName.Value = txtPost.Text;


                lblCreatePerson.Text = exam.CreatePerson;
                lblCreateTime.Text   = exam.CreateTime.ToString("yyyy-MM-dd HH:mm");

                if (ViewState["startmode"].ToString() == "Edit")
                {
                    RandomExamResultBLL reBll = new RandomExamResultBLL();
                    IList <RailExam.Model.RandomExamResult> examResults =
                        reBll.GetRandomExamResultByExamID(exam.RandomExamId);

                    if (examResults.Count > 0)
                    {
                        ViewState["mode"] = "ReadOnly";
                    }
                }

                chkHasTrainClass.Checked   = exam.HasTrainClass;
                hfHasTrainClass.Value      = chkHasTrainClass.Checked.ToString();
                ViewState["HasTrainClass"] = chkHasTrainClass.Checked.ToString();

                SetTrainClassVisible(chkHasTrainClass.Checked);

                if (exam.ExamStyle == 1)
                {
                    rbnStyle1.Checked = true;
                }
                else
                {
                    rbnStyle2.Checked = true;
                }

                if (chkHasTrainClass.Checked)
                {
                    OracleAccess db = new OracleAccess();

                    RandomExamTrainClassHaBLL      objTrainClassBll  = new RandomExamTrainClassHaBLL();
                    IList <RandomExamTrainClassHa> objTrainClassList =
                        objTrainClassBll.GetRandomExamTrainClassByRandomExamID(exam.RandomExamId);
                    DataTable dataTable = new DataTable();
                    dataTable.Columns.Add(new DataColumn("RandomExamTrainClassID", typeof(int)));
                    dataTable.Columns.Add(new DataColumn("RandomExamID", typeof(int)));
                    dataTable.Columns.Add(new DataColumn("TrainClassID", typeof(string)));
                    dataTable.Columns.Add(new DataColumn("TrainClassName", typeof(string)));

                    string strSql = "";
                    foreach (RandomExamTrainClassHa trainClass in objTrainClassList)
                    {
                        DataRow newRow = dataTable.NewRow();

                        newRow[0] = trainClass.RandomExamTrainClassID;
                        newRow[1] = trainClass.RandomExamID;
                        newRow[2] = trainClass.ArchivesID;

                        strSql    = "select * from Train_Info where Archives_Num='" + trainClass.ArchivesID + "' and Unit_Code='" + exam.OrgId + "'";
                        newRow[3] = db.RunSqlDataSet(strSql).Tables[0].Rows[0]["Class_Name"].ToString();

                        dataTable.Rows.Add(newRow);

                        if (hfTrainClassID.Value == "")
                        {
                            hfTrainClassID.Value = trainClass.ArchivesID;
                        }
                        else
                        {
                            hfTrainClassID.Value = hfTrainClassID.Value + "," + trainClass.ArchivesID;
                        }
                    }

                    ViewState["TrainClass"] = hfTrainClassID.Value;

                    Grid1.DataSource = dataTable;
                    Grid1.DataBind();

                    //当考试为补考的时候,不能修改培训班信息
                    if (exam.IsReset)
                    {
                        chkHasTrainClass.Enabled = false;
                        Grid1.Enabled            = false;
                        btnAddTrainClass.Visible = false;
                    }
                    hfIsReset.Value = exam.IsReset.ToString();
                }
                else
                {
                    ViewState["TrainClass"] = "";
                }
            }

            if (ViewState["mode"].ToString() == "ReadOnly")
            {
                chkHasTrainClass.Enabled = false;
                txtExamName.Enabled      = false;
                dateBeginTime.Enabled    = false;
                dateEndTime.Enabled      = false;
                ddlType.Enabled          = false;
                txtExamTime.Enabled      = false;
                rbnExamMode1.Enabled     = false;
                rbnExamMode2.Enabled     = false;
                txtMET2.Enabled          = false;
                chUD.Enabled             = false;
                chAutoScore.Enabled      = false;
                chSeeAnswer.Enabled      = false;
                chSeeScore.Enabled       = false;
                chPublicScore.Enabled    = false;
                txtDescription.Enabled   = false;
                txtMemo.Enabled          = false;
                rbnStartMode1.Enabled    = false;
                rbnStartMode2.Enabled    = false;
                rbnStyle1.Enabled        = false;
                rbnStyle2.Enabled        = false;
                txtPost.Enabled          = false;
                ddlIsGroup.Enabled       = false;
                ddlTech.Enabled          = false;
                txtCategoryName.Enabled  = false;
                txtPassScore.Enabled     = false;
            }
        }