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