/// <summary>勤務シフトの取得 /// </summary> /// <param name="n"></param> /// <returns></returns> public virtual CPattern GetByID(long n) { // ビルトインのもの if (n == CPattern.NULL.ObjectID) { return(CPattern.NULL); } if (n == CPattern.DAYOFF.ObjectID) { return(CPattern.DAYOFF); } if (n == CPattern.MULTI.ObjectID) { return(CPattern.MULTI); } // 検索する CPattern work = new CPattern(this); work.ObjectID = n; int i = patterns.BinarySearch(work); if (i < 0) { return(CPattern.NULL); } return(patterns[i]); }
/// <summary>人員配置のセーブ /// </summary> public XmlElement SaveRequirePatterns(XmlDocument doc, CTimeTable all) { XmlElement element = doc.CreateElement("requires"); SaveTmElement(doc, element, all.Requires); for (int i = 0; i < all.Requires.Size(true); i++) { CRequirePatterns require = all.Requires[i, true]; if (!require.BuiltIn) { XmlElement pNode = doc.CreateElement("require"); SaveTmElement(doc, pNode, require); pNode.SetAttribute("name", require.Name); // シフトごとの人数 for (int j = 0; j < require.Size(); j++) { CPattern pattern = require.GetPattern(j); int needs = require.GetRequire(pattern); if (needs > 0) { XmlElement nNode = doc.CreateElement("pattern"); nNode.SetAttribute("patternid", pattern.ObjectID.ToString()); nNode.SetAttribute("requirenums", needs.ToString()); pNode.AppendChild(nNode); } } // エレメントを追加 element.AppendChild(pNode); } } return(element); }
/// <summary> /// メンバーの作業時間の重複(エラー)または※2の時間を満たしていなければ警告 /// </summary> private void CheckSpace() { CSchedule tsche = sdate[_member]; CPattern tpatt = tsche.Pattern; if (!(tpatt == null || tpatt.BuiltIn)) { // 今日のパターンが存在する DateTime today = sdate.Date; DateTime yesterday = today.AddDays(-1).Date; CScheduledDate ydate = Root[yesterday]; CSchedule ysche = ydate[_member]; CPattern ypatt = ysche.Pattern; if (!(ypatt == null || ypatt.BuiltIn)) { // 昨日のパターンが存在する! DateTime yend = yesterday + ypatt.End; DateTime tend = yend + _member.Spacetime; DateTime tstt = today + tpatt.Start; if (yend >= tstt) { AddItem(EvaluationResult.ERROR, _member.Name + "の作業時間が重複しています。(" + tstt + "~" + yend + ")"); } else if (tend > tstt) { AddItem(EvaluationResult.WARNING, _member.Name + "の作業間隔が不足しています。(" + yend + "~" + tstt + ")"); } } } }
/// <summary>勤務シフトの長さを返す /// </summary> /// <param name="date"></param> /// <param name="member"></param> /// <param name="head"></param> /// <returns></returns> private string ReturnPatternLength(DateTime date, CMember member, bool head) { if (head) { return(member.Name + "の勤務時間"); } CScheduledDate sdate = TimeTable[date]; CSchedule schdule = sdate[member]; if (schdule == null) { return(TimeSpan.Zero.ToString()); } CPattern pattern = schdule.Pattern; if (pattern == null) { return(TimeSpan.Zero.ToString()); } if (pattern.BuiltIn) { return(TimeSpan.Zero.ToString()); } return(pattern.Scope.ToString()); }
/// <summary>メンバーの作業時間の重複(エラー)または※2の時間を満たしていなければ警告 /// </summary> private void CheckSpace() { CSchedule tsche = sdate[_member]; CPattern tpatt = tsche.Pattern; if (!(tpatt == null || tpatt.BuiltIn)) { // 今日のシフトが存在する DateTime today = sdate.Date; DateTime yesterday = today.AddDays(-1).Date; CScheduledDate ydate = Root[yesterday]; CSchedule ysche = ydate[_member]; CPattern ypatt = ysche.Pattern; if (!(ypatt == null || ypatt.BuiltIn)) { // 昨日のシフトが存在する! DateTime yend = yesterday + ypatt.End; DateTime tend = yend + _member.Spacetime; DateTime tstt = today + tpatt.Start; if (yend >= tstt) { AddItem(EEvaluationResult.ERROR, GenerateMessage(msg_space_error, new string[] { _member.Name, tstt.ToString(), yend.ToString() })); } else if (tend > tstt) { AddItem(EEvaluationResult.WORNING, GenerateMessage(msg_space_worning, new string[] { _member.Name, tstt.ToString(), yend.ToString() })); } } } }
/// <summary>勤務シフトの終了を返す /// </summary> /// <param name="date"></param> /// <param name="member"></param> /// <param name="head"></param> /// <returns></returns> private string ReturnPatternEnd(DateTime date, CMember member, bool head) { if (head) { return(member.Name + "のシフト終了"); } CScheduledDate sdate = TimeTable[date]; CSchedule schdule = sdate[member]; if (schdule == null) { return(""); } CPattern pattern = schdule.Pattern; if (pattern == null) { return(""); } if (pattern.BuiltIn) { return(""); } DateTime ret = date.Date + pattern.End; return(ret.ToLongDateString() + " " + ret.ToLongTimeString()); }
/// <summary>メンバーの連続稼動日数が※1の日数を超えていたら警告 /// </summary> private void CheckContinuas() { CSchedule schedule = sdate[_member]; if (schedule == null) { return; } CPattern pattern = schedule.Pattern; if (pattern == null || pattern.BuiltIn) { return; } // 休み設定 int conu = _member.ContinuasInt; if (conu > 0) { int cont = sdate.GetMemberContinues(_member, conu * 2); int rest = conu - cont; if (rest <= 0) { if (cont >= conu * 2) { AddItem(EEvaluationResult.ERROR, GenerateMessage(msg_cont_error, new string[] { _member.Name, (cont + 1).ToString() })); } else { AddItem(EEvaluationResult.WORNING, GenerateMessage(msg_cont_worning, new string[] { _member.Name, (cont + 1).ToString() })); } } } }
/// <summary>勤務シフトのインポート /// </summary> /// <param name="pattern">インポートする勤務シフト</param> /// <returns>成功:追加したエレメント/不成功:null</returns> private CPattern ImportPattern(CPattern pattern) { #region 重複チェック CPatternCollection col = Target.Patterns; if (col.GetByName(pattern.Name) != null) { return(null); } if (col.Size() >= FMainForm.MaxItemCount) { return(null); } #endregion #region インポート CPattern newpattern = col.CreatePattern(true); newpattern.Name = pattern.Name; newpattern.Start = pattern.Start; newpattern.Scope = pattern.Scope; newpattern.Rest = pattern.Rest; newpattern.Notes = pattern.Notes + "\nインポートされました。"; foreach (string key in pattern.properties.AllKeys) { newpattern[key] = pattern[key]; } #endregion col.AddPattern(newpattern); // 終端 return(newpattern); }
/// <summary>勤務シフトを作成する /// </summary> /// <param name="member"></param> /// <param name="Span1"></param> /// <param name="Span2"></param> /// <param name="Rest"></param> private void CreatePattern (CMember member, TimeSpan Span1, TimeSpan Span2, TimeSpan Rest) { double dSpan1 = (long)(Span1.TotalHours / UMultiEditor.Threshold.TotalHours); double dSpan2 = (long)(Span2.TotalHours / UMultiEditor.Threshold.TotalHours); double dSpan3 = dSpan2 - dSpan1; CPattern newpattern = this.TimeTable.Patterns.CreatePattern(); //newpattern.Name = "新しい作業用のシフト(" + dates[0].ToShortDateString() + (dates.Count <= 1 ? "" : "~" + dates[dates.Count - 1].ToShortDateString()) + ")"; newpattern.Name = NewPatternName.Replace("%1", dates[0].ToShortDateString() + (dates.Count <= 1 ? "" : "~" + dates[dates.Count - 1].ToShortDateString())); newpattern.Start = TimeSpan.FromHours(dSpan1 * UMultiEditor.Threshold.TotalHours); newpattern.Scope = TimeSpan.FromHours(dSpan3 * UMultiEditor.Threshold.TotalHours); newpattern.Rest = Rest; newpattern.Notes = NewPatternNotes; newpattern.Created = dates[0]; TimeTableManager.UI.FPatternDialog dialog = new TimeTableManager.UI.FPatternDialog(); dialog.Pattern = newpattern; if (dialog.ShowDialog(MainForm) == DialogResult.OK) { TimeTable.Patterns.AddPattern(dialog.Pattern); foreach (DateTime date in dates) { if (date >= DateTime.Today) { CScheduledDate sdate = TimeTable[date]; sdate[member].Pattern = dialog.Pattern; } } // 臨時用のみかどうか if (TimeTable.Patterns.Size() >= TimeTableManager.UI.FMainForm.MaxItemCount || MessageBox.Show(this.MainForm, CreatePatternMessage, CreatePatternTitle, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes) { newpattern.SetAvailable(false, dates[dates.Count - 1]); } } }
/// <summary>ダブルクリック時の処理 /// </summary> /// <param name="sender">イベントの発生したオブジェクト</param> /// <param name="e">発生したイベント</param> private void BodyTable_CellMouseDoubleClick (object sender, DataGridViewCellMouseEventArgs e) { if (e.RowIndex >= 0) { CMember member = this.Members[e.RowIndex]; switch (e.ColumnIndex) { case 0: // メンバーの修正 TimeTableManager.UI.FMemberDialog dialogM = new TimeTableManager.UI.FMemberDialog(); dialogM.Member = member; if (dialogM.ShowDialog(this.MainForm) == DialogResult.OK) { Refresh(); } break; case 1: // シフトの修正 PatternWrapper wrapper = Member2PatternWrapper[member]; CPattern pattern = wrapper.Pattern; if (pattern != null && !pattern.BuiltIn) { TimeTableManager.UI.FPatternDialog dialogP = new TimeTableManager.UI.FPatternDialog(); dialogP.Pattern = pattern; if (dialogP.ShowDialog(this.MainForm) == DialogResult.OK) { Refresh(); } } break; case 2: // コメントの追加・修正 if (Dates.Count == 1 && Editable) { BodyTable.CurrentCell = BodyTable[e.ColumnIndex, e.RowIndex]; BodyTable.BeginEdit(true); } break; } } else { } }
/// <summary>メンバーの作成(初期化機能つき) /// </summary> /// <returns>新しいメンバー</returns> public virtual CMember CreateMember(bool init) { CMember ret = CreateMember(); if (init) { ret.Name = "新しいメンバー"; int size = TimeTable.Patterns.Size(true); for (int i = 0; i < size; i++) { CPattern pattern = TimeTable.Patterns[i, true]; if (pattern.Removed == null && !pattern.BuiltIn) { ret.AddPattern(pattern); } } ret.SetAvailableDay(CTimeTable.tMonday, true); ret.SetAvailableDay(CTimeTable.tTuesday, true); ret.SetAvailableDay(CTimeTable.tWednesday, true); ret.SetAvailableDay(CTimeTable.tThursday, true); ret.SetAvailableDay(CTimeTable.tFriday, true); ret.SetAvailableDay(CTimeTable.tSaturday, true); ret.SetAvailableDay(CTimeTable.tSunday, true); ret.Priority = GetLastPriority(true) + 1;; } return(ret); }
/// <summary>値のセット /// </summary> /// <param name="sender">イベントの発生したオブジェクト</param> /// <param name="e">発生したイベント</param> private void BodyTable_CellValuePushed (object sender, DataGridViewCellValueEventArgs e) { CMember member = Members[e.RowIndex]; switch (e.ColumnIndex) { case 0: break; case 1: if (this.TimeTable == null) return; CPattern pattern = e.Value as CPattern; if (pattern == CPattern.MULTI) return; foreach (DateTime date in Dates) { if (date >= DateTime.Today) { CScheduledDate sdate = this.TimeTable[date]; CSchedule sche = sdate[member]; sche.Pattern = pattern; } } SetUpMember2Pattern(member); break; case 2: if (Dates.Count == 1 && StartDate >= DateTime.Today) { string val = e.Value as string; if (val == null) val = ""; if (this.TimeTable != null) { DateTime date = StartDate; CScheduledDate sdate = this.TimeTable[date]; CSchedule sche = sdate[member]; sche.Notes = val; //sche.SetProperty("notes", val); this.timeTable.NotifyScheduleEdited(sche); SetUpMember2Pattern(member); } } break; } }
/// <summary>人員配置からコントロールに値をセットする /// </summary> private void RequirePatterns2Components() { this.TxtRequireName.Text = this.require.Name; // 名前 // 人員配置の展開 CTimeTable table = this.require.TimeTable; for (int i = 0; i < table.Patterns.Size(true); i++) { CPattern pattern = table.Patterns[i, true]; int needs = this.require.GetRequire(pattern); if (!pattern.BuiltIn && (pattern.Removed == null || needs > 0)) { DataRow row = this.TblRequires.NewRow(); row["ClmPattern"] = pattern; row["ClmPatternName"] = pattern.Name; row["ClmRequireNum"] = needs; this.TblRequires.Rows.Add(row); } } this.ResetTotalCount(); this.txtNote.Text = this.require.Notes; // メモ this.txtCreated.Value = this.require.Created; // 作成日 if (this.require.Removed != null && this.require.Removed > this.txtRemoved.MinDate) { this.txtRemoved.Value = (DateTime)this.require.Removed; // 削除日 } }
/// <summary>人員配置のロード /// </summary> public void LoadRequirePatterns(XmlElement element, CTimeTable all) { XmlElement pNode = element.FirstChild as XmlElement; while (pNode != null) { if (pNode.Name == "require") { CRequirePatterns require = all.Requires.CreateRequirePatterns(); LoadTmElement(pNode, require); require.Name = pNode.GetAttribute("name"); // 利用できるシフト XmlElement tNode = pNode.FirstChild as XmlElement; while (tNode != null) { if (tNode.Name == "pattern") { // int patternid = int.Parse(tNode.GetAttribute("patternid")); int requirenum = int.Parse(tNode.GetAttribute("requirenums")); CPattern pattern = all.Patterns.GetByID(patternid); require.SetRequire(pattern, requirenum); } // tNode = tNode.NextSibling as XmlElement; } // all.Requires.AddRequirePatterns(require); } // pNode = pNode.NextSibling as XmlElement; } //all.Requires.AddRequirePatterns(RequirePatterns.NOWORK); }
/// <summary>勤務シフトの削除 /// </summary> /// <param name="pattern">削除するシフト</param> public virtual void DelPattern(CPattern pattern) { pattern.SetAvailable(false); if (pattern.Removed != null) { availables.Remove(pattern); // 人員配置から削除 CRequirePatternsCollection requires = parent.Requires; for (int i = 0; i < requires.Size(true); i++) { CRequirePatterns require = requires[i, true]; require.SetRequire(pattern, 0); } // メンバーから削除 CMemberCollection members = parent.Members; for (int i = 0; i < members.Size(true); i++) { CMember member = members[i, true]; member.RemovePattern(pattern); } // イベント発生 if (TimeTable != null) { TimeTable.NotifyPatternsEdited(EnumTimeTableElementEventTypes.ElementRemoved, pattern); } } }
/// <summary> /// スケジュール日に設定されたパターンの一覧 /// </summary> /// <returns>パターンのリスト</returns> private List <CPattern> GetDatePatterns() { List <CPattern> ret = new List <CPattern>(); int max = sdate.ValidMemberSize; for (int i = 0; i < max; i++) { CMember member = sdate.GetValidMember(i); CSchedule schedule = sdate[member]; if (schedule != null) { CPattern pattern = schedule.Pattern; if (pattern == null || pattern.BuiltIn) { } else { if (!ret.Contains(pattern)) { ret.Add(pattern); } } } } ret.Sort(new PatternComparer1()); return(ret); }
/// <summary> /// メンバーの連続稼動日数が※1の日数を超えていたら警告 /// </summary> private void CheckContinuas() { CSchedule schedule = sdate[_member]; if (schedule == null) { return; } CPattern pattern = schedule.Pattern; if (pattern == null || pattern.BuiltIn) { return; } // 休み設定 int conu = _member.ContinuasInt; if (conu > 0) { int cont = sdate.GetMemberContinues(_member, conu * 2); int rest = conu - cont; if (rest <= 0) { if (cont >= conu * 2) { AddItem(EvaluationResult.ERROR, _member.Name + "の作業日が" + (cont + 1) + "日以上連続しています。"); } else { AddItem(EvaluationResult.WARNING, _member.Name + "の作業日が" + (cont + 1) + "日連続しています。"); } } } }
/// <summary>インポートする /// </summary> /// <param name="sender">イベント発生元</param> /// <param name="e">発生したイベント</param> private void BtnOK_Click(object sender, EventArgs e) { try { foreach (DataRowView view in LstImportMember.CheckedItems) { CMember item = view.Row["ClmImportMember"] as CMember; ImportMember(item); } foreach (DataRowView view in LstImportPattern.CheckedItems) { CPattern item = view.Row["ClmImportPattern"] as CPattern; ImportPattern(item); } foreach (DataRowView view in LstImportRequires.CheckedItems) { CRequirePatterns item = view.Row["ClmImportRequires"] as CRequirePatterns; ImportRequires(item); } foreach (DataRowView view in LstImportDayOff.CheckedItems) { CDayOff item = view.Row["ClmImportDayOff"] as CDayOff; ImportDayOff(item); } } catch (Exception ex) { MessageBox.Show(this, ex.StackTrace, ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error); } Dispose(); }
/// <summary>勤務シフトに対してマッチしているか?(1日単位で) /// </summary> /// <returns>割合</returns> private double CheckPatternMuches() { double ret = 0.0; CRequirePatterns require = sdate.Require; if (require == null) { return(1.0); } List <CPattern> patterns = new List <CPattern>(); for (int i = 0; i < require.Size(); i++) { patterns.Add(require.GetPattern(i)); } int j = 0; for (int i = 0; i < patterns.Count; i++) { CPattern pattern = patterns[i]; if (pattern.IsAvailable(sdate.Date)) { double work = CheckPatternMuches(pattern); ret += work; j++; } } ret = (j > 0 ? ret / (double)j : 1.0); return(ret); }
/// <summary>勤務シフトの復活 /// </summary> /// <param name="pattern"></param> public virtual void RescuePattern(CPattern pattern) { if (pattern.Removed != null) { pattern.SetAvailable(true); availables.Add(pattern); availables.Sort(); parent.NotifyPatternsEdited(EnumTimeTableElementEventTypes.ElementRescued, pattern); } }
/// <summary>勤務シフトの追加 /// </summary> /// <param name="sender">イベントの発生したオブジェクト</param> /// <param name="e">発生したイベント</param> private void TsmiAddPattern_Click (object sender, EventArgs e) { if (this.TimeTable == null) return; if (this.TimeTable.Patterns.Size() >= TimeTableManager.UI.FMainForm.MaxItemCount) return; CPattern pattern = this.TimeTable.Patterns.CreatePattern(true); TimeTableManager.UI.FPatternDialog dialog = new TimeTableManager.UI.FPatternDialog(); dialog.Pattern = pattern; if (dialog.ShowDialog(this.MainForm) == DialogResult.OK) { this.TimeTable.Patterns.AddPattern(pattern); } }
/// <summary>勤務シフトの取得(なかったらヌル) /// </summary> /// <param name="n"></param> /// <returns></returns> private CPattern GetByIDorNull(long n) { // 検索する CPattern work = new CPattern(this); work.ObjectID = n; int i = patterns.BinarySearch(work); return(i >= 0 ? patterns[i] : null); }
/// <summary>メンバーの就業状態の作成 /// </summary> /// <param name="member"></param> private void SetUpMember2Pattern (CMember member) { PatternWrapper wrapper = new PatternWrapper(); wrapper.Pattern = CPattern.NULL; wrapper.StartTime = TimeSpan.MaxValue; wrapper.EndTime = TimeSpan.MinValue; if ((member == null) || (Dates.Count <= 0) || (TimeTable == null)) { // 存在しない if (member != null && Member2PatternWrapper.ContainsKey(member)) { Member2PatternWrapper.Remove(member); } return; } else { // 繰り返し int i = 0; foreach (DateTime date in Dates) { CScheduledDate sdate = TimeTable[date]; CSchedule schedule = sdate[member]; CPattern work = schedule.Pattern; if (i == 0) { // 最初のシフト wrapper.Pattern = work; if (work != null && !work.BuiltIn) { wrapper.StartTime = work.Start; wrapper.EndTime = work.End; i++; } wrapper.Notes = schedule.Notes; //wrapper.Notes = schedule["notes"]; } else if (wrapper.Pattern != work) { if (schedule.Notes != "") { // メモの追加 wrapper.Notes += "," + schedule.Notes; } // 複数選択されている wrapper.Pattern = CPattern.MULTI; if (work != null && !work.BuiltIn) { if (wrapper.StartTime > work.Start) { wrapper.StartTime = work.Start; } if (wrapper.EndTime < work.End) { wrapper.EndTime = work.End; } } i++; } } // 追加する if (Member2PatternWrapper.ContainsKey(member)) { Member2PatternWrapper[member] = wrapper; } else { Member2PatternWrapper.Add(member, wrapper); } } }
/// <summary>勤務シフトの修正 /// </summary> /// <param name="sender">イベントの発生したオブジェクト</param> /// <param name="e">発生したイベント</param> private void TsmiEditPattern_Click (object sender, EventArgs e) { CMember member = this.Members[CurrentRowIndex]; PatternWrapper wrapper = Member2PatternWrapper[member]; CPattern pattern = wrapper.Pattern; if (pattern != null && !pattern.BuiltIn) { TimeTableManager.UI.FPatternDialog dialog = new TimeTableManager.UI.FPatternDialog(); dialog.Pattern = pattern; if (dialog.ShowDialog(this.MainForm) == DialogResult.OK) { Refresh(); } } }
/// <summary>勤務シフトの作成 /// </summary> /// <returns></returns> public virtual CPattern CreatePattern(bool init) { CPattern ret = new CPattern(this); if (init) { ret.Name = "新しいシフト"; ret.Start = TimeTable.StartTime; ret.Scope = TimeTable.Around; ret.Rest = TimeSpan.FromHours(1.0); } return(ret); }
/// <summary>メンバーがこのパターンを含むかどうかチェックする /// </summary> private void CheckPattern() { CSchedule tsche = sdate[_member]; CPattern tpatt = tsche.Pattern; if (!(tpatt == null || tpatt.BuiltIn)) { if (!_member.Contains(tpatt)) { AddItem(EEvaluationResult.NOTICE, GenerateMessage(msg_pattern_nomatch, new string[] { tpatt.Name, _member.Name })); } } }
/// <summary>勤務シフトの取得 /// </summary> /// <param name="name"></param> /// <returns></returns> public CPattern GetByName(string name) { CPattern ret = null; for (int i = 0; i < Size(true); i++) { if (this[i, true].Name == name) { ret = this[i, true]; break; } } return(ret); }
/// <summary>勤務シフトの一覧の作成 /// </summary> private void SetUpValidPatterns () { TblPattern.Clear(); if (TimeTable != null && Dates.Count > 0) { // 期間中有効なシフトのみ int size = TimeTable.Patterns.Size(true); for (int i = 0; i < size; i++) { CPattern pattern = TimeTable.Patterns[i, true]; if (pattern.IsAvailable(StartDate, EndDate)) { TblPattern.Rows.Add(pattern, pattern.Name); } } TblPattern.Rows.Add(CPattern.MULTI, CPattern.MULTI.Name); } }
/// <summary>勤務シフト一覧の作成 /// </summary> private void MakePatterns() { for (int i = 0; i < Source.Patterns.Size(true); i++) { CPattern pattern = Source.Patterns[i, true]; if (!pattern.BuiltIn) { DataRow dr = TblImportPattern.NewRow(); dr[ClmImportPattern] = pattern; dr[ClmImportPatternName] = pattern.Name + (pattern.Removed == null ? "" : "(削除されています)"); TblImportPattern.Rows.Add(dr); } } }
/// <summary>コンポーネントからメンバーへ /// </summary> private void Components2Member() { this.Member.Priority = (int)this.NumPriority.Value; // 優先度 this.Member.Name = this.TxtMemberName.Text; // 名前 this.Member.ExpectedWork = TxtWorkTime.Value.TimeOfDay; // 気体の作業時間 // 期待される休憩時間 double ExpectedRest; if (double.TryParse(this.TxtRest.Text, out ExpectedRest)) { this.Member.ExpectedRest = ExpectedRest; } else { this.Member.ExpectedRest = 1.0; } this.Member.IsChief = this.ChkChief.Checked; // チーフメンバーですか? // シフトの追加 this.Member.ClearPatterns(); // とりあえず最初にクリア foreach (System.Data.DataRowView view in this.LstPatterns.CheckedItems) { // そのあとで有効なものを追加する CPattern pattern = view.Row["ClmPattern"] as CPattern; this.Member.AddPattern(pattern); } // 稼働日 Member.SetAvailableDay(CTimeTable.tMonday, chkMonday.Checked); Member.SetAvailableDay(CTimeTable.tTuesday, chkTuesday.Checked); Member.SetAvailableDay(CTimeTable.tWednesday, chkWednesday.Checked); Member.SetAvailableDay(CTimeTable.tThursday, chkThursday.Checked); Member.SetAvailableDay(CTimeTable.tFriday, chkFriday.Checked); Member.SetAvailableDay(CTimeTable.tSaturday, chkSaturday.Checked); Member.SetAvailableDay(CTimeTable.tSunday, chkSunday.Checked); // 稼動間隔 Member.Spacetime = dtpSpace.Value.TimeOfDay; // 連続稼働日 Member.ContinuasInt = (int)numContinuas.Value; // メモ Member.Notes = txtNotes.Text; // 作成日 Member.Created = txtCreated.Value.Date; // 削除日 if (Member.Removed != null) { Member.Removed = txtRemoved.Value.Date; } // イベント発生 this.Member.TimeTable.NotifyMembersEdited(EnumTimeTableElementEventTypes.ElementEdited, this.Member); }