次のコードは、カレンダーにアイコンのある休暇を持つ人を表示するために機能しますが、問題は、for文の最初の行ですカスタムリストの範囲外のオブジェクトが返される
protected void apertureAppointments_TimeSlotCreated(object sender, TimeSlotCreatedEventArgs e)
int i = 0;
bool isFound = false;
List<tblApertureNetShiftPattern> _list = new List<tblApertureNetShiftPattern>();
_list = _dal.getHolidays();
List<Resource> resources = new List<Resource>(apertureAppointments.Resources.GetResourcesByType("Managers"));
Resource res = resources[5];
foreach (tblApertureNetShiftPattern sp in _list)
{
if (_list.Count >= 1)
i++;
else
i = 0;
DateTime? dt1 = _list[i - 1].startdate;
DateTime? dt2 = _list[i - 1].endDate;
if (e.TimeSlot.Start == dt1 && e.TimeSlot.Resource.Text == sp.manager_name)
{
isFound = true;
if (DoDateRangesOverlap(e.TimeSlot.Start, e.TimeSlot.End, dt1, dt2) && isFound == true)
{
Label temperatureLabel = new Label();
if (sp.appointmentType == Constants.shiftDayoff)
{
e.TimeSlot.CssClass = "DayOfCssStyle";
temperatureLabel.CssClass = "DayOfCssStyle";
}
else if (sp.appointmentType == Constants.shiftHoliday)
{
e.TimeSlot.CssClass = "HolidayCssStyle";
temperatureLabel.CssClass = "HolidayCssStyle";
}
else if (sp.appointmentType == Constants.shiftStat)
{
e.TimeSlot.CssClass = "statCssStyle";
temperatureLabel.CssClass = "statCssStyle";
}
else if (sp.appointmentType == Constants.shiftsickDay)
{
e.TimeSlot.CssClass = "SickDayStyle";
temperatureLabel.CssClass = "SickDayStyle";
}
temperatureLabel.Text = sp.Description;
Image imageControl = new Image();
imageControl.ImageUrl = @"~\images\aperturenet\Calendar\resources\holidays.png";
temperatureLabel.BackColor = System.Drawing.Color.Orange;
dt1 = null;
dt2 = null;
isFound = false;
e.TimeSlot.Control.Controls.AddAt(1, temperatureLabel);
e.TimeSlot.Control.Controls.AddAt(2, imageControl);
}
}
}
リストは0,1を示しOBVので、私はそれ爆弾アウト-1 [配列int型]でを持っていない場合は私の問題は、ここでは
if (_list.Count >= 1) i++; else i = 0; DateTime? dt1 = _list[i - 1].startdate; DateTime? dt2 = _list[i - 1].endDate;
このコードにありループpr oballyは2つの項目を示します。どのようなオブジェクトが範囲外のインデックスエラーを回避する最善の方法です。
Getholidaysは、stafメンバーが私たちのためにシンプルなリストになっていますので、ここで気にすることはありません。
public List<tblApertureNetShiftPattern> getHolidays()
{
List<tblApertureNetShiftPattern> list = new List<tblApertureNetShiftPattern>();
var q = from _holidays in apertureNetEntities.tblApertureNetShiftPatterns.Where(w => w.isDeleted == false)
select _holidays;
list = q.ToList();
return list;
}
また、自分のコードが非常に肥大していると感じるように、よりうまくやっています。
また、if/elseifの全体を辞書に移動してから直接アクセスすることもできます。これには重複したコードが含まれています –