示例#1
0
        /// <summary>
        /// 変数の初期設定
        /// </summary>
        private void CreateNewValiable()
        {
            int iStaffKindCount     = frmMainSchedule.dtStaffKind.Rows.Count;
            int iStaffPositionCount = frmMainSchedule.dtStaffPosition.Rows.Count;
            int iHoliday            = frmMainSchedule.dtHoliday.Rows.Count;
            int iDayOfWeek          = frmMainSchedule.dtDayOfWeek.Rows.Count;

            frmMainSchedule.piDayCount           = clsCommonControl.GetTargetMonthDays(frmMainSchedule.lblTargetMonth.Text);
            frmMainSchedule.piScheduleStaffCount = frmMainSchedule.dtScheduleStaff.Rows.Count;
            frmMainSchedule.piWorkKindCount      = frmMainSchedule.dtWorkKind.Rows.Count;
            frmMainSchedule.pstrTargetMonth      = frmMainSchedule.lblTargetMonth.Text.Substring(0, 4) + frmMainSchedule.lblTargetMonth.Text.Substring(5, 2);

            frmMainSchedule.aiData = new int[frmMainSchedule.piScheduleStaffCount, frmMainSchedule.piDayCount, frmMainSchedule.piWorkKindCount];
            // Add Start WataruT 2020.08.14 予定データ作成中のデータキープ機能追加
            frmMainSchedule.aiDataKeep = new int[frmMainSchedule.piScheduleStaffCount, frmMainSchedule.piDayCount, frmMainSchedule.piWorkKindCount];
            // Add End   WataruT 2020.08.14 予定データ作成中のデータキープ機能追加
            frmMainSchedule.aiNightLastMonthFlag = new int[frmMainSchedule.piScheduleStaffCount, frmMainSchedule.piDayCount];
            frmMainSchedule.aiDataRequestFlag    = new int[frmMainSchedule.piScheduleStaffCount, frmMainSchedule.piDayCount];
            // Add Start WataruT 2020.08.14 予定データ作成中のデータキープ機能追加
            frmMainSchedule.aiDataKeepRequestFlag = new int[frmMainSchedule.piScheduleStaffCount, frmMainSchedule.piDayCount];
            // Add End   WataruT 2020.08.14 予定データ作成中のデータキープ機能追加
            frmMainSchedule.aiDataNow      = new int[frmMainSchedule.piScheduleStaffCount, frmMainSchedule.piDayCount];
            frmMainSchedule.adRowTotalData = new double[frmMainSchedule.piScheduleStaffCount, 3];
            // Mod Start WataruT 2020.07.30 遅出の表示対応
            //frmMainSchedule.adColumnTotalData = new double[frmMainSchedule.piDayCount, 6];
            frmMainSchedule.adColumnTotalData = new double[frmMainSchedule.piDayCount, 7];
            // Mod End   WataruT 2020.07.30 遅出の表示対応
            // Add Start WataruT 2020.08.14 予定データ作成中のデータキープ機能追加
            frmMainSchedule.adRowTotalDataKeep    = new double[frmMainSchedule.piScheduleStaffCount, 3];
            frmMainSchedule.adColumnTotalDataKeep = new double[frmMainSchedule.piDayCount, 7];
            // Add End   WataruT 2020.08.14 予定データ作成中のデータキープ機能追加
            frmMainSchedule.astrWorkKind      = new string[frmMainSchedule.piWorkKindCount, 2];
            frmMainSchedule.astrStaffKind     = new string[iStaffKindCount, 3];
            frmMainSchedule.astrStaffPosition = new string[iStaffPositionCount];
            frmMainSchedule.astrScheduleStaff = new string[frmMainSchedule.piScheduleStaffCount, 3];
            frmMainSchedule.astrStaffDayOnly  = new string[frmMainSchedule.piScheduleStaffCount, 4];
            frmMainSchedule.astrHoliday       = new string[iHoliday];
            frmMainSchedule.astrDayOfWeek     = new string[iDayOfWeek, 2];
            frmMainSchedule.astrCountLimitDay = new string[frmMainSchedule.astrDayOfWeek.GetLength(0), 2];

            // 実績データ用
            if (frmMainSchedule.piDataKind == 3)
            {
                frmMainSchedule.astrResultOtherWorkTime = new string[frmMainSchedule.piScheduleStaffCount, frmMainSchedule.piDayCount, 3, 3];
                frmMainSchedule.astrResultWorkKind      = new string[frmMainSchedule.piScheduleStaffCount, frmMainSchedule.piDayCount];
                frmMainSchedule.astrResultChangeFlag    = new string[frmMainSchedule.piScheduleStaffCount, frmMainSchedule.piDayCount];
            }
        }
        /// <summary>
        /// データグリッドに希望シフトをセット
        /// </summary>
        public void SetMainData_Request()
        {
            int       iScheduleStaffCount, iDayCount, iWorkKindCount; // データ数(職員、日付、勤務種類)
            string    strTargetMonth;                                 // 対象年月
            DataTable dt;
            DataRow   dr;

            // データ数を変数にセット
            iScheduleStaffCount = frmMainSchedule.dtScheduleStaff.Rows.Count;
            iDayCount           = clsCommonControl.GetTargetMonthDays(frmMainSchedule.lblTargetMonth.Text);
            iWorkKindCount      = frmMainSchedule.dtWorkKind.Rows.Count;

            // 対象年月をセット
            strTargetMonth = frmMainSchedule.lblTargetMonth.Text.Substring(0, 4) + frmMainSchedule.lblTargetMonth.Text.Substring(5, 2);

            //グリッドの描画処理停止
            frmMainSchedule.grdMain.SuspendLayout();
            frmMainSchedule.grdMain.DataSource = null;

            // 初期データをセット
            for (int iScheduleStaff = 0; iScheduleStaff < iScheduleStaffCount; iScheduleStaff++)
            {
                for (int iDay = 0; iDay < iDayCount; iDay++)
                {
                    for (int iWorkKind = 0; iWorkKind < iWorkKindCount; iWorkKind++)
                    {
                        frmMainSchedule.aiData[iScheduleStaff, iDay, iWorkKind] = 0;
                    }
                }
                for (int iWorkKind = 0; iWorkKind < 3; iWorkKind++)
                {
                    frmMainSchedule.adRowTotalData[iScheduleStaff, iWorkKind] = 0;
                }
            }

            for (int iDay = 0; iDay < iDayCount; iDay++)
            {
                for (int iWorkKind = 0; iWorkKind < 3; iWorkKind++)
                {
                    frmMainSchedule.adColumnTotalData[iDay, iWorkKind] = 0;
                }
            }

            // 希望シフトデータをセット
            SetRequestData();

            //
            // --- メイングリッドヘッダ ---
            //

            // DataTableを初期化
            dt = new DataTable();

            // DataTableにカラムヘッダを作成
            dt.Columns.Add("NAME", Type.GetType("System.String"));
            for (int iDay = 1; iDay <= frmMainSchedule.piDayCount; iDay++)
            {
                dt.Columns.Add(iDay.ToString(), Type.GetType("System.String"));
            }

            // DataTableにデータをセット
            for (int iRow = 0; iRow < 2; iRow++)
            {
                dr = dt.NewRow();

                // 1行目:日にちをセット
                if (iRow == 0)
                {
                    for (int iDay = 1; iDay <= frmMainSchedule.piDayCount; iDay++)
                    {
                        dr[iDay.ToString()] = iDay.ToString();
                    }
                }
                // 2行目:"氏名"と曜日をセット
                else
                {
                    dr["NAME"] = "氏名";
                    for (int iDay = 1; iDay <= frmMainSchedule.piDayCount; iDay++)
                    {
                        dr[iDay.ToString()] = clsCommonControl.GetWeekName(frmMainSchedule.pstrTargetMonth + String.Format("{0:D2}", iDay), frmMainSchedule.astrHoliday);
                    }
                }
                dt.Rows.Add(dr);
            }

            // グリッドにデータをセット
            frmMainSchedule.grdMainHeader.DataSource = dt;

            // デザイン設定
            for (int iRow = 0; iRow < 2; iRow++)
            {
                // 列幅・色(職員)
                frmMainSchedule.grdMainHeader[0, iRow].Style.ForeColor = Color.Black;
                frmMainSchedule.grdMainHeader[0, iRow].Style.BackColor = SystemColors.Control;
                frmMainSchedule.grdMainHeader.Columns[0].Width         = GRID_WIDTH_COLUMN_STAFF;

                for (int iColumn = 1; iColumn <= frmMainSchedule.piDayCount; iColumn++)
                {
                    // 列幅
                    frmMainSchedule.grdMainHeader.Columns[iColumn].Width = GRID_WIDTH_COLUMN_DATA;

                    // 色(日付、曜日)
                    frmMainSchedule.grdMainHeader[iColumn, iRow].Style.ForeColor = clsCommonControl.GetWeekNameForeColor(frmMainSchedule.grdMainHeader[iColumn, iRow].Value.ToString());
                    frmMainSchedule.grdMainHeader[iColumn, iRow].Style.BackColor = clsCommonControl.GetWeekNameBackgroundColor(
                        clsCommonControl.GetWeekName(frmMainSchedule.pstrTargetMonth + String.Format("{0:D2}", iColumn), frmMainSchedule.astrHoliday));
                }
            }

            //
            // --- メイングリッドデータ ---
            //

            // データテーブル作成
            dt = new DataTable();

            dt.Columns.Add("NAME", Type.GetType("System.String"));

            for (int iDay = 1; iDay <= iDayCount; iDay++)
            {
                dt.Columns.Add(iDay.ToString(), Type.GetType("System.String"));
            }

            for (int iScheduleStaff = 0; iScheduleStaff < iScheduleStaffCount; iScheduleStaff++)
            {
                DataRow nr = dt.NewRow();

                nr["NAME"] = frmMainSchedule.astrScheduleStaff[iScheduleStaff, 1];
                for (int iDay = 1; iDay <= iDayCount; iDay++)
                {
                    for (int iWorkKind = 0; iWorkKind < iWorkKindCount; iWorkKind++)
                    {
                        if (frmMainSchedule.aiData[iScheduleStaff, iDay - 1, iWorkKind] == 1)
                        {
                            nr[iDay.ToString()] = frmMainSchedule.astrWorkKind[iWorkKind, 1];
                            break;
                        }
                    }
                }
                dt.Rows.Add(nr);
            }

            // メイングリッドにデータをセット
            frmMainSchedule.grdMain.DataSource = dt;

            // 職員氏名欄のデザイン設定
            for (int iScheduleStaff = 0; iScheduleStaff < frmMainSchedule.piScheduleStaffCount; iScheduleStaff++)
            {
                frmMainSchedule.grdMain[0, iScheduleStaff].Style.ForeColor = Color.Black;
                frmMainSchedule.grdMain[0, iScheduleStaff].Style.BackColor = SystemColors.Control;
            }

            // 列幅(職員)
            frmMainSchedule.grdMain.Columns[0].Width = GRID_WIDTH_COLUMN_STAFF;

            // 勤務種類データのデザイン設定
            for (int iDay = 1; iDay <= frmMainSchedule.piDayCount; iDay++)
            {
                //列幅
                frmMainSchedule.grdMain.Columns[iDay].Width = GRID_WIDTH_COLUMN_DATA;

                // 文字の色
                for (int iScheduleStaff = 0; iScheduleStaff < frmMainSchedule.piScheduleStaffCount; iScheduleStaff++)
                {
                    frmMainSchedule.grdMain[iDay, iScheduleStaff].Style.ForeColor = clsCommonControl.GetWorkKindForeColor(
                        frmMainSchedule.grdMain[iDay, iScheduleStaff].Value.ToString());
                    frmMainSchedule.grdMain[iDay, iScheduleStaff].Style.BackColor = clsCommonControl.GetWeekNameBackgroundColor(
                        clsCommonControl.GetWeekName(frmMainSchedule.pstrTargetMonth + String.Format("{0:D2}", iDay), frmMainSchedule.astrHoliday));
                }
            }

            // 先頭列のみ固定とする
            frmMainSchedule.grdMain.Columns[0].Frozen = true;

            // 行の合計グリッドをセット
            SetRowTotal();

            // 列の合計グリッドをセット
            SetColumnTotal();

            // グリッドの選択状態を解除
            frmMainSchedule.grdMain.CurrentCell       = null;
            frmMainSchedule.grdMainHeader.CurrentCell = null;

            //グリッドの描画再開
            frmMainSchedule.grdMain.ResumeLayout();
            frmMainSchedule.grdMainHeader.ResumeLayout();
        }