/// <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(); }