گروه بندی اطلاعات و گزارشات Master-Details در PdfReport
نویسنده: وحید نصیری
تاریخ: ۱۳۹۱/۰۷/۲۵ ۱:۲۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
using System;
using PdfRpt.Core.Contracts;
using PdfRpt.FluentInterface;
namespace PdfReportSamples.MasterDetails
{
public class MasterDetailsPdfReport
{
public IPdfReportData CreatePdfReport()
{
return new PdfReport().DocumentPreferences(doc =>
{
doc.RunDirection(PdfRunDirection.LeftToRight);
doc.Orientation(PageOrientation.Portrait);
doc.PageSize(PdfPageSize.A4);
doc.DocumentMetadata(new DocumentMetadata { Author = "Vahid", Application = "PdfRpt", Keywords = "Test", Subject = "Test Rpt", Title = "Test" });
})
.DefaultFonts(fonts =>
{
fonts.Path(Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\arial.ttf",
Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\verdana.ttf");
})
.PagesHeader(header =>
{
header.CustomHeader(new MasterDetailsHeaders { PdfRptFont = header.PdfFont });
})
.PagesFooter(footer =>
{
footer.DefaultFooter(DateTime.Now.ToString("MM/dd/yyyy"));
})
.MainTableTemplate(t => t.BasicTemplate(BasicTemplate.SilverTemplate))
.MainTablePreferences(table =>
{
table.ColumnsWidthsType(TableColumnWidthType.Relative);
table.GroupsPreferences(new GroupsPreferences
{
GroupType = GroupType.HideGroupingColumns,
RepeatHeaderRowPerGroup = true,
ShowOneGroupPerPage = false,
SpacingBeforeAllGroupsSummary = 5f,
NewGroupAvailableSpacingThreshold = 170
});
})
.MainTableDataSource(dataSource =>
{
dataSource.GenericDataReader(
providerName: "System.Data.SQLite",
connectionString: "Data Source=" + AppPath.ApplicationPath + "\\data\\blogs.sqlite",
sql: @"select
tblParents.BirthDate as ParentBirthDate,
tblParents.Name as ParentName,
tblParents.LastName as ParentLastName,
tblKids.Name as KidName,
tblKids.BirthDate as KidBirthDate
from tblParents
left outer join tblKids
on tblKids.ParentId = tblParents.Id
order by
tblParents.Name,
tblParents.LastName,
tblKids.Name"
);
})
.MainTableColumns(columns =>
{
columns.AddColumn(column =>
{
column.PropertyName("rowNo");
column.IsRowNumber(true);
column.CellsHorizontalAlignment(HorizontalAlignment.Left);
column.IsVisible(true);
column.Order(0);
column.Width(1);
column.HeaderCell("#");
});
columns.AddColumn(column =>
{
column.PropertyName("ParentBirthDate");
column.CellsHorizontalAlignment(HorizontalAlignment.Center);
column.Order(1);
column.Width(2);
column.HeaderCell("ParentBirthDate");
column.Group(true,
(val1, val2) =>
{
var date1 = (DateTime)val1;
var date2 = (DateTime)val2;
return date1.Year == date2.Year && date1.Month == date2.Month && date1.Day == date2.Day;
});
});
columns.AddColumn(column =>
{
column.PropertyName("ParentName");
column.CellsHorizontalAlignment(HorizontalAlignment.Center);
column.Order(2);
column.Width(2);
column.HeaderCell("ParentName");
column.Group(true,
(val1, val2) =>
{
return val1.ToString() == val2.ToString();
});
});
columns.AddColumn(column =>
{
column.PropertyName("ParentLastName");
column.CellsHorizontalAlignment(HorizontalAlignment.Center);
column.Order(3);
column.Width(2);
column.HeaderCell("ParentLastName");
column.Group(true,
(val1, val2) =>
{
return val1.ToString() == val2.ToString();
});
});
columns.AddColumn(column =>
{
column.PropertyName("KidName");
column.CellsHorizontalAlignment(HorizontalAlignment.Center);
column.Order(4);
column.Width(2);
column.HeaderCell("Child Name");
column.IsVisible(true);
});
columns.AddColumn(column =>
{
column.PropertyName("KidBirthDate");
column.CellsHorizontalAlignment(HorizontalAlignment.Center);
column.Order(5);
column.Width(2);
column.HeaderCell("BirthDate");
column.IsVisible(true);
});
})
.MainTableEvents(events =>
{
events.DataSourceIsEmpty(message: "There is no data available to display.");
})
.Export(e => e.ToExcel())
.Generate(data => data.AsPdfFile(AppPath.ApplicationPath + "\\Pdf\\RptMasterDetailsSample.pdf"));
}
}
}
using System.Collections.Generic;
using iTextSharp.text;
using iTextSharp.text.pdf;
using PdfRpt.ColumnsItemsTemplates;
using PdfRpt.Core.Contracts;
using PdfRpt.Core.Helper;
namespace PdfReportSamples.MasterDetails
{
public class MasterDetailsHeaders : IPageHeader
{
public IPdfFont PdfRptFont { set; get; }
public PdfPTable RenderingGroupHeader(Document pdfDoc, PdfWriter pdfWriter, IList<CellData> newGroupInfo, IList<SummaryCellData> summaryData)
{
var parentName = newGroupInfo.GetSafeStringValueOf("ParentName");
var parentLastName = newGroupInfo.GetSafeStringValueOf("ParentLastName");
var parentBirthDate = newGroupInfo.GetSafeStringValueOf("ParentBirthDate");
var table = new PdfPTable(relativeWidths: new[] { 1f, 5f }) { WidthPercentage = 100 };
table.AddSimpleRow(
(cellData, cellProperties) =>
{
cellData.Value = "Name:";
cellProperties.PdfFont = PdfRptFont;
cellProperties.PdfFontStyle = DocumentFontStyle.Bold;
cellProperties.HorizontalAlignment = HorizontalAlignment.Left;
},
(cellData, cellProperties) =>
{
cellData.Value = parentName;
cellProperties.PdfFont = PdfRptFont;
cellProperties.HorizontalAlignment = HorizontalAlignment.Left;
});
table.AddSimpleRow(
(cellData, cellProperties) =>
{
cellData.Value = "Last Name:";
cellProperties.PdfFont = PdfRptFont;
cellProperties.PdfFontStyle = DocumentFontStyle.Bold;
cellProperties.HorizontalAlignment = HorizontalAlignment.Left;
},
(cellData, cellProperties) =>
{
cellData.Value = parentLastName;
cellProperties.PdfFont = PdfRptFont;
cellProperties.HorizontalAlignment = HorizontalAlignment.Left;
});
table.AddSimpleRow(
(cellData, cellProperties) =>
{
cellData.Value = "Birth Date:";
cellProperties.PdfFont = PdfRptFont;
cellProperties.PdfFontStyle = DocumentFontStyle.Bold;
cellProperties.HorizontalAlignment = HorizontalAlignment.Left;
},
(cellData, cellProperties) =>
{
cellData.Value = parentBirthDate;
cellProperties.PdfFont = PdfRptFont;
cellProperties.HorizontalAlignment = HorizontalAlignment.Left;
});
return table.AddBorderToTable(borderColor: BaseColor.LIGHT_GRAY, spacingBefore: 5f);
}
public PdfPTable RenderingReportHeader(Document pdfDoc, PdfWriter pdfWriter, IList<SummaryCellData> summaryData)
{
var table = new PdfPTable(numColumns: 1) { WidthPercentage = 100 };
table.AddSimpleRow(
(cellData, cellProperties) =>
{
cellData.CellTemplate = new ImageFilePathField();
cellData.Value = AppPath.ApplicationPath + "\\Images\\01.png";
cellProperties.HorizontalAlignment = HorizontalAlignment.Center;
});
table.AddSimpleRow(
(cellData, cellProperties) =>
{
cellData.Value = "Family rpt";
cellProperties.PdfFont = PdfRptFont;
cellProperties.PdfFontStyle = DocumentFontStyle.Bold;
cellProperties.HorizontalAlignment = HorizontalAlignment.Center;
});
return table.AddBorderToTable();
}
}
}
select
tblParents.BirthDate as ParentBirthDate,
tblParents.Name as ParentName,
tblParents.LastName as ParentLastName,
tblKids.Name as KidName,
tblKids.BirthDate as KidBirthDate
from tblParents
left outer join tblKids
on tblKids.ParentId = tblParents.Id
order by
tblParents.Name,
tblParents.LastName,
tblKids.Name
tblParents.Name as ParentName, tblKids.Name as KidName,
column.Group(true,
(val1, val2) =>
{
return val1.ToString() == val2.ToString();
});
table.GroupsPreferences(new GroupsPreferences
{
GroupType = GroupType.HideGroupingColumns,
RepeatHeaderRowPerGroup = true,
ShowOneGroupPerPage = false,
SpacingBeforeAllGroupsSummary = 5f,
NewGroupAvailableSpacingThreshold = 170
});
public PdfPTable RenderingGroupHeader(Document pdfDoc, PdfWriter pdfWriter, IList<CellData> newGroupInfo, IList<SummaryCellData> summaryData)
{
var parentName = newGroupInfo.GetSafeStringValueOf("ParentName");
var parentLastName = newGroupInfo.GetSafeStringValueOf("ParentLastName");
var parentBirthDate = newGroupInfo.GetSafeStringValueOf("ParentBirthDate");
var table = new PdfPTable(relativeWidths: new[] { 1f, 5f }) { WidthPercentage = 100 };
table.AddSimpleRow(
(cellData, cellProperties) =>
{
cellData.Value = "Name:";
cellProperties.PdfFont = PdfRptFont;
cellProperties.PdfFontStyle = DocumentFontStyle.Bold;
cellProperties.HorizontalAlignment = HorizontalAlignment.Left;
},
(cellData, cellProperties) =>
{
cellData.Value = parentName;
cellProperties.PdfFont = PdfRptFont;
cellProperties.HorizontalAlignment = HorizontalAlignment.Left;
});
سلام.
من یک View در SQL دارم که چند جدول مختلف را با هم Join میزند.
رکوردها باید با فیلد ReceptionPatientId گروه بندی شوند.
کد برنامه:
return new PdfReport().DocumentPreferences(doc =>
{
doc.RunDirection(PdfRunDirection.LeftToRight);
doc.Orientation(PageOrientation.Portrait);
doc.PageSize(PdfPageSize.A4);
doc.DocumentMetadata(new DocumentMetadata
{
Author = username,
Application = "",
Keywords = "Executive Unit Work List Report",
Subject = "Executive Unit Work List Report",
Title = "Executive Unit Work List Report"
});
})
.DefaultFonts(fonts => fonts.Path(Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\tahoma.ttf",
Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\verdana.ttf"))
.PagesFooter(footer => footer.DefaultFooter(DateTime.Now.ToLongPersianDate()))
.PagesHeader(header =>
{
header.CustomHeader(new UnitWorkListHeader { PdfRptFont = header.PdfFont });
})
.MainTableTemplate(template => template.BasicTemplate(BasicTemplate.RainyDayTemplate))
.MainTablePreferences(table =>
{
table.ColumnsWidthsType(TableColumnWidthType.Relative);
table.GroupsPreferences(new GroupsPreferences
{
GroupType = GroupType.HideGroupingColumns,
RepeatHeaderRowPerGroup = true,
ShowOneGroupPerPage = false,
SpacingBeforeAllGroupsSummary = 5f,
NewGroupAvailableSpacingThreshold = 170
});
})
.MainTableDataSource(dataSource =>
dataSource.DataTable(new ReceptionPatientBl(context).
GetReceptionSummaryView(_rcpIds).
ToDataSet(false).Tables[0]))
.MainTableColumns(columns =>
{
columns.AddColumn(column =>
{
column.PropertyName("rowNo");
column.IsRowNumber(true);
column.CellsHorizontalAlignment(HorizontalAlignment.Left);
column.IsVisible(true);
column.Order(0);
column.Width(1);
column.HeaderCell("#");
});
columns.AddColumn(column =>
{
column.PropertyName("ReceptionPatientId");
column.IsRowNumber(false);
column.CellsHorizontalAlignment(HorizontalAlignment.Center);
column.Order(3);
column.Width(2);
column.HeaderCell("ReceptionPatientId");
column.Group(true,
(val1, val2) =>
{
return val1 == val2;
});
});
columns.AddColumn(column =>
{
column.PropertyName("ReceptionDate");
column.IsRowNumber(false);
column.CellsHorizontalAlignment(HorizontalAlignment.Center);
column.Order(3);
column.Width(2);
column.HeaderCell("ReceptionDate");
column.Group(true,
(val1, val2) =>
{
return val1 == val2;
});
});
columns.AddColumn(column =>
{
column.PropertyName("IsDelete");
column.IsRowNumber(false);
column.CellsHorizontalAlignment(HorizontalAlignment.Center);
column.Order(3);
column.Width(2);
column.HeaderCell("IsDelete");
column.Group(true,
(val1, val2) =>
{
return val1 == val2;
});
});
columns.AddColumn(column =>
{
column.PropertyName("Fname");
column.IsRowNumber(false);
column.CellsHorizontalAlignment(HorizontalAlignment.Center);
column.Order(3);
column.Width(2);
column.HeaderCell("Fname");
column.Group(true,
(val1, val2) =>
{
return val1 == val2;
});
});
columns.AddColumn(column =>
{
column.PropertyName("Lname");
column.IsRowNumber(false);
column.CellsHorizontalAlignment(HorizontalAlignment.Center);
column.Order(3);
column.Width(2);
column.HeaderCell("Lname");
column.Group(true,
(val1, val2) =>
{
return val1 == val2;
});
});
columns.AddColumn(column =>
{
column.PropertyName("Sex");
column.IsRowNumber(false);
column.CellsHorizontalAlignment(HorizontalAlignment.Center);
column.Order(3);
column.Width(2);
column.HeaderCell("Sex");
column.Group(true,
(val1, val2) =>
{
return val1 == val2;
});
});
columns.AddColumn(column =>
{
column.PropertyName("BirthDate");
column.IsRowNumber(false);
column.CellsHorizontalAlignment(HorizontalAlignment.Center);
column.Order(3);
column.Width(2);
column.HeaderCell("BirthDate");
column.Group(true,
(val1, val2) =>
{
return val1 == val2;
});
});
columns.AddColumn(column =>
{
column.PropertyName("Mobile");
column.IsRowNumber(false);
column.CellsHorizontalAlignment(HorizontalAlignment.Center);
column.Order(3);
column.Width(2);
column.HeaderCell("Mobile");
column.Group(true,
(val1, val2) =>
{
return val1 == val2;
});
});
columns.AddColumn(column =>
{
column.PropertyName("LabId");
column.IsRowNumber(false);
column.CellsHorizontalAlignment(HorizontalAlignment.Center);
column.Order(3);
column.Width(2);
column.HeaderCell("LabId");
column.Group(true,
(val1, val2) =>
{
return val1.ToString() == val2.ToString();
});
});
columns.AddColumn(column =>
{
column.PropertyName("TestName");
column.CellsHorizontalAlignment(HorizontalAlignment.Center);
column.Order(4);
column.Width(2);
column.HeaderCell("نام تست");
column.IsVisible(true);
});
columns.AddColumn(column =>
{
column.PropertyName("TestShortName");
column.CellsHorizontalAlignment(HorizontalAlignment.Center);
column.Order(5);
column.Width(2);
column.HeaderCell("نام اختصاری تست");
column.IsVisible(true);
});
})
.MainTableEvents(events => events.DataSourceIsEmpty(message: "There is no data available to display."))
//.Export(export =>
//{
// export.ToExcel();
//})
.Generate(data =>
{
var fileName = "ExecutiveWorkListReport.pdf";
fileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8);
data.FlushInBrowser(fileName);
});
}اما خروجی به صورت زیر است:
همانطور که مشاهده میکنید بدون توجه به فیلد ID سه مرتبه این گروه تکرار شده است.
ممکن است راهنمایی فرمایید مشکل کار کجاست؟
column.Group((val1, val2) =>
{
return (int)val1 == (int)val2;
});GroupType = GroupType.IncludeGroupingColumns
column.ColumnItemsTemplate(template =>
{
template.TextBlock();
template.DisplayFormatFormula(obj => DateTimeHelper.ToPersianShortDateString((DateTime)obj));
});