نمایش تقویم ماهیانه شمسی توسط PdfReport
نویسنده: وحید نصیری
تاریخ: ۱۳۹۱/۰۹/۱۰ ۱۸:۲۷
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
namespace PdfReportSamples.Models
{
public class UserWorkedHours
{
public int Id { set; get; }
public string Name { set; get; }
public int DayNumber { set; get; }
public int Month { set; get; }
public int Year { set; get; }
public string Description { set; get; }
}
}
private static List<UserWorkedHours> createUsersWorkedHours()
{
var usersWorkedHours = new List<UserWorkedHours>();
for (int i = 1; i < 11; i++)
{
for (int j = 1; j < 28; j++)
{
usersWorkedHours.Add(new UserWorkedHours
{
Id = i,
Name = "کارمند " + i,
Year = 1391, // سال و ماه بر اساس نوع تقویم انتخابی مشخص میشود
Month = i,
DayNumber = j,
Description = i % 2 == 0 ? "05:00" : "08:00"
});
}
}
return usersWorkedHours;
}
using System.Collections.Generic;
namespace PdfRpt.Calendar
{
public class CalendarData
{
public int Month { set; get; }
public int Year { set; get; }
public IList<DayInfo> MonthDaysInfo { set; get; }
}
}
namespace PdfRpt.Calendar
{
public class DayInfo
{
public int DayNumber { set; get; }
public int Month { set; get; }
public int Year { set; get; }
public string Description { set; get; }
public bool ShowDescriptionInFooter { set; get; }
}
}
public static IList<UserMonthCalendar> CreateDataSource()
{
var usersWorkedHours = createUsersWorkedHours();
// Mapping a list of normal Users WorkedHours to a list of Users + CalendarData
return usersWorkedHours
.GroupBy(x => new
{
Id = x.Id,
Name = x.Name
})
.Select(
x => new UserMonthCalendar
{
Id = x.Key.Id,
Name = x.Key.Name,
// Calendar's cell data type should be PdfRpt.Calendar.CalendarData
MonthCalendarData = new CalendarData
{
Year = x.First().Year,
Month = x.First().Month,
MonthDaysInfo = x.ToList().Select(y => new DayInfo
{
Description = y.Description,
ShowDescriptionInFooter = false,
DayNumber = y.DayNumber
}).ToList()
}
}).ToList();
}
using PdfRpt.Calendar;
namespace PdfReportSamples.Models
{
public class UserMonthCalendar
{
public int Id { set; get; }
public string Name { set; get; }
// Calendar's cell data type should be CalendarData
public CalendarData MonthCalendarData { set; get; }
}
}
columns.AddColumn(column =>
{
// Calendar's cell data type should be PdfRpt.Calendar.CalendarData
column.PropertyName<UserMonthCalendar>(x => x.MonthCalendarData);
column.CellsHorizontalAlignment(HorizontalAlignment.Center);
column.IsVisible(true);
column.Order(3);
column.Width(3);
column.HeaderCell("تقویم ماهیانه");
column.ColumnItemsTemplate(itemsTemplate =>
{
itemsTemplate.MonthCalendar(new CalendarAttributes
{
CalendarType = CalendarType.PersianCalendar,
UseLongDayNamesOfWeek = true,
Padding = 3,
DescriptionHorizontalAlignment = HorizontalAlignment.Center,
SplitRows = true,
CellsCustomizer = info =>
{
if (info.Year == 1391 && info.Month == 1 && info.DayNumber == 1)
{
info.NumberCell.BackgroundColor = new BaseColor(System.Drawing.Color.LimeGreen);
var phrase = info.NumberCell.Phrase;
foreach (var chunk in phrase.Chunks)
chunk.Font.Color = new BaseColor(System.Drawing.Color.Yellow);
}
}
});
});
});