public CalendarControl(ReportView form, ChartSelect val, List <int[]> data) { inData = data; chartEnum = val; parentView = form; _calendar = parentView.chartCalendar; }
public ChartControl(ReportView form, ChartSelect val, List <int[]> data) { _parser = new DataParser(); mainChart = form.MainChart; subChart = form.SubChart; chartEnum = val; inData = data; readyFlag = false; }
public ReportView(ChartSelect chart, List <int[]> data) { InitializeComponent(); chartEnum = chart; inData = data; _editChart = new ChartControl(this, chartEnum, inData); _editCalendar = new CalendarControl(this, chartEnum, inData); initReportChart(); drawReportChart(); }
public List <int[]> getCumulativeData(List <int[]> data, ChartSelect chart, DateTime fD, DateTime eD) { List <int[]> rtnData = new List <int[]>(); List <int[]> parsedData = new List <int[]>(); int[] inData; int[] outData; int[] getData = new int[4]; int[] tempData = new int[4]; int baseInCnt = 0, baseOutCnt = 0, baseTime = 0; int firstIdx = 0, lastIdx = 0, getIdx = 0; switch (chart) { case ChartSelect.E_CHART_HOURLY: #region HOUR_CUMUL int HourRange = 0; /* find first element on selected date */ getData = data.Find( delegate(int[] dt) { firstIdx = data.IndexOf(dt); return(dt[0] == Int32.Parse(fD.ToString("yyyyMMdd"))); } ); HourRange = 24; /* temporary 24 */ baseTime = getData[1] / 10000; /* get Hour from time(HHmmss) */ baseInCnt = getData[2]; /* get IN cnt */ /* 선택한 날짜가 시작날짜가 아닐 경우 baseCnt는 이전날의 마지막 Cnt로 잡혀야 한다. */ if (baseInCnt != 0) { DateTime prevDate = fD.AddDays(-1); tempData = getData; getData = data.FindLast( delegate(int[] dt) { getIdx = data.IndexOf(dt); return(dt[0] == Int32.Parse(prevDate.ToString("yyyyMMdd"))); } ); if (getData == null) { getData = tempData; } baseInCnt = getData[2]; } baseOutCnt = getData[3]; /* get OUT cnt */ getData = data.FindLast( delegate(int[] dt) { lastIdx = data.IndexOf(dt); return(dt[0] == Int32.Parse(fD.ToString("yyyyMMdd"))); } ); inData = new int[HourRange]; outData = new int[HourRange]; /* find data hourly */ for (int i = baseTime; i < HourRange; i++) { getIdx = data.FindIndex(firstIdx, lastIdx - firstIdx + 1, delegate(int[] dt) { int hour = dt[1] / 10000; /* get HH from HHmmss */ return(hour > baseTime); } ); if (getIdx >= 0) { getData = data[getIdx]; baseTime++; inData[i] = getData[2] - baseInCnt; outData[i] = getData[3] - baseOutCnt; firstIdx = getIdx; } else { getData = data[lastIdx]; inData[i] = getData[2] - baseInCnt; outData[i] = getData[3] - baseOutCnt; break; } } rtnData.Add(inData); rtnData.Add(outData); #endregion break; case ChartSelect.E_CHART_WEEKLY: #region WEEK_COMUL int WeekRange = 7; /* find first element on selected date */ getData = data.Find( delegate(int[] dt) { firstIdx = data.IndexOf(dt); return(dt[0] == Int32.Parse(fD.ToString("yyyyMMdd"))); } ); baseInCnt = getData[2]; /* get IN cnt */ /* 선택한 날짜가 시작날짜가 아닐 경우 baseCnt는 이전날의 마지막 Cnt로 잡혀야 한다. */ if (baseInCnt != 0) { DateTime prevDate = fD.AddDays(-1); tempData = getData; getData = data.FindLast( delegate(int[] dt) { getIdx = data.IndexOf(dt); return(dt[0] == Int32.Parse(prevDate.ToString("yyyyMMdd"))); } ); if (getData == null) { getData = tempData; } baseInCnt = getData[2]; } baseOutCnt = getData[3]; /* get OUT cnt */ getData = data.FindLast( delegate(int[] dt) { lastIdx = data.IndexOf(dt); return(dt[0] == Int32.Parse(eD.ToString("yyyyMMdd"))); } ); inData = new int[WeekRange]; outData = new int[WeekRange]; DateTime currentDate; currentDate = fD; /* get search date */ /* find data hourly */ for (int i = 0; i < WeekRange; i++) { /* 각 날짜의 firstIdx - lastIdx의 데이터값을 저장하고 하루씩 이동, 1주일 치 기재 */ /* 해당 날짜의 마지막 data를 구한다 */ getData = data.FindLast( delegate(int[] dt) { getIdx = data.IndexOf(dt); return(dt[0] == Int32.Parse(currentDate.ToString("yyyyMMdd"))); } ); if (getData != null) /* find data */ { inData[i] = getData[2]; outData[i] = getData[3]; currentDate = currentDate.AddDays(1); firstIdx = getIdx; } } rtnData.Add(inData); rtnData.Add(outData); #endregion break; default: break; } return(rtnData); }