public void TestRender_DynamicPanel_In_DataSourcePanel_Vertical() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange parentRange = ws.Range(1, 2, 4, 2); parentRange.AddToNamed("ParentRange", XLScope.Worksheet); IXLRange childRange = ws.Range(2, 2, 4, 2); childRange.AddToNamed("ChildRange", XLScope.Worksheet); ws.Cell(1, 2).Value = "{di:Name}"; ws.Cell(2, 2).Value = "{Headers}"; ws.Cell(3, 2).Value = "{Data}"; ws.Cell(4, 2).Value = "{Totals}"; var parentPanel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("ParentRange"), report, report.TemplateProcessor); var childPanel = new ExcelDataSourceDynamicPanel("m:DataProvider:GetChildIEnumerable(di:Name)", ws.NamedRange("ChildRange"), report, report.TemplateProcessor) { Parent = parentPanel, }; parentPanel.Children = new[] { childPanel }; parentPanel.Render(); Assert.AreEqual(ws.Range(1, 2, 12, 3), parentPanel.ResultRange); ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourceDynamicPanel_InsideDataSourcePanel_Test), nameof(TestRender_DynamicPanel_In_DataSourcePanel_Vertical)), ws.Workbook); //report.Workbook.SaveAs("test.xlsx"); }
public void TestIfGroupByPropertyIsInvalid() { var wb = new XLWorkbook(); IXLWorksheet ws = wb.AddWorksheet("Test"); IXLRange range = ws.Range(2, 2, 3, 2); ws.Cell(2, 2).Value = "One"; ws.Cell(3, 2).Value = "One"; var panel = new ExcelDataSourcePanel("Stub", Substitute.For <IXLNamedRange>(), new object(), Substitute.For <ITemplateProcessor>()) { GroupBy = "str" }; var method = panel.GetType().GetMethod("GroupResult", BindingFlags.Instance | BindingFlags.NonPublic); SetResultRange(panel, range); ExceptionAssert.ThrowsBaseException <InvalidCastException>(() => method.Invoke(panel, null), $"Parse \"GroupBy\" property failed. Cannot convert value \"str\" to {nameof(Int32)}"); panel = new ExcelDataSourcePanel("Stub", Substitute.For <IXLNamedRange>(), new object(), Substitute.For <ITemplateProcessor>()) { GroupBy = "1, 1.4" }; SetResultRange(panel, range); ExceptionAssert.ThrowsBaseException <InvalidCastException>(() => method.Invoke(panel, null), $"Parse \"GroupBy\" property failed. Cannot convert value \"1.4\" to {nameof(Int32)}"); }
public void TestPanelRenderEvents() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange range = ws.Range(2, 2, 2, 3); range.AddToNamed("TestRange", XLScope.Worksheet); ws.Cell(2, 2).Value = "{di:Name}"; ws.Cell(2, 3).Value = "{di:Date}"; var panel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("TestRange"), report, report.TemplateProcessor) { BeforeRenderMethodName = "TestExcelDataSourcePanelBeforeRender", AfterRenderMethodName = "TestExcelDataSourcePanelAfterRender", BeforeDataItemRenderMethodName = "TestExcelDataItemPanelBeforeRender", AfterDataItemRenderMethodName = "TestExcelDataItemPanelAfterRender", }; panel.Render(); Assert.AreEqual(ws.Range(2, 2, 4, 2), panel.ResultRange); ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelIEnumerableRenderTest), nameof(TestPanelRenderEvents)), ws.Workbook); //report.Workbook.SaveAs("test.xlsx"); }
public void TestRenderDataSet() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange range = ws.Range(2, 2, 2, 6); range.AddToNamed("TestRange", XLScope.Worksheet); ws.Cell(2, 2).Value = "{di:Id}"; ws.Cell(2, 3).Value = "{di:Name}"; ws.Cell(2, 4).Value = "{di:IsVip}"; ws.Cell(2, 5).Value = "{di:Description}"; ws.Cell(2, 6).Value = "{di:Type}"; var panel = new ExcelDataSourcePanel("m:DataProvider:GetAllCustomersDataSet()", ws.NamedRange("TestRange"), report, report.TemplateProcessor); panel.Render(); Assert.AreEqual(ws.Range(2, 2, 4, 6), panel.ResultRange); ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelDataSetRenderTest), nameof(TestRenderDataSet)), ws.Workbook); //report.Workbook.SaveAs("test.xlsx"); }
public void TestHorizontalInVerticalPanelsGrouping() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange parentRange = ws.Range(2, 2, 4, 3); parentRange.AddToNamed("ParentRange", XLScope.Worksheet); IXLRange child = ws.Range(2, 3, 4, 3); child.AddToNamed("ChildRange", XLScope.Worksheet); ws.Cell(2, 2).Value = "{di:Name}"; ws.Cell(3, 3).Value = "{di:Field1}"; ws.Cell(4, 3).Value = "{di:Field2}"; var parentPanel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("ParentRange"), report, report.TemplateProcessor); var childPanel = new ExcelDataSourcePanel("m:DataProvider:GetChildIEnumerable(di:Name)", ws.NamedRange("ChildRange"), report, report.TemplateProcessor) { Parent = parentPanel, Type = PanelType.Horizontal, }; parentPanel.Children = new[] { childPanel }; parentPanel.Render(); Assert.AreEqual(ws.Range(2, 2, 10, 5), parentPanel.ResultRange); ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelRender_WithGrouping_MixedPanels_Test), nameof(TestHorizontalInVerticalPanelsGrouping)), ws.Workbook); //report.Workbook.SaveAs("test.xlsx"); }
public void TestRenderEmptyDataSet() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange range = ws.Range(2, 2, 2, 6); range.AddToNamed("TestRange", XLScope.Worksheet); ws.Cell(2, 2).Value = "{di:Id}"; ws.Cell(2, 3).Value = "{di:Name}"; ws.Cell(2, 4).Value = "{di:IsVip}"; ws.Cell(2, 5).Value = "{di:Description}"; ws.Cell(2, 6).Value = "{di:Type}"; var panel = new ExcelDataSourcePanel("m:DataProvider:GetEmptyDataSet()", ws.NamedRange("TestRange"), report, report.TemplateProcessor); panel.Render(); Assert.IsNull(panel.ResultRange); Assert.AreEqual(0, ws.CellsUsed(XLCellsUsedOptions.Contents).Count()); Assert.AreEqual(0, ws.NamedRanges.Count()); Assert.AreEqual(0, ws.Workbook.NamedRanges.Count()); Assert.AreEqual(1, ws.Workbook.Worksheets.Count); //report.Workbook.SaveAs("test.xlsx"); }
public void TestRenderIEnumerableVerticalNoShift() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange range = ws.Range(2, 2, 3, 5); range.AddToNamed("TestRange", XLScope.Worksheet); range.FirstCell().Style.Border.SetTopBorder(XLBorderStyleValues.Thin); range.FirstCell().Style.Border.SetBottomBorder(XLBorderStyleValues.Thin); range.FirstCell().Style.Border.SetLeftBorder(XLBorderStyleValues.Thin); ws.Cell(3, 5).Style.Border.SetBottomBorder(XLBorderStyleValues.Thin); ws.Cell(2, 4).DataType = XLDataType.Number; //ws.Cell(2, 4).DataType = XLCellValues.Number; ws.Cell(2, 2).Value = "{di:Name}"; ws.Cell(2, 3).Value = "{di:Date}"; ws.Cell(2, 4).Value = "{di:Sum}"; ws.Cell(2, 5).Value = "{di:Contacts}"; ws.Cell(3, 2).Value = "{di:Contacts.Phone}"; ws.Cell(3, 3).Value = "{di:Contacts.Fax}"; ws.Cell(3, 4).Value = "{p:StrParam}"; ws.Cell(1, 1).Value = "{di:Name}"; ws.Cell(4, 1).Value = "{di:Name}"; ws.Cell(1, 6).Value = "{di:Name}"; ws.Cell(4, 6).Value = "{di:Name}"; ws.Cell(3, 1).Value = "{di:Name}"; ws.Cell(3, 6).Value = "{di:Name}"; ws.Cell(1, 4).Value = "{di:Name}"; ws.Cell(4, 4).Value = "{di:Name}"; ws.Cell(8, 5).Value = "{di:Date}"; ws.Cell(8, 5).Style.Border.SetTopBorder(XLBorderStyleValues.Thin); ws.Cell(8, 5).Style.Border.SetRightBorder(XLBorderStyleValues.Thin); ws.Cell(8, 5).Style.Border.SetBottomBorder(XLBorderStyleValues.Thin); ws.Cell(8, 5).Style.Border.SetLeftBorder(XLBorderStyleValues.Thin); ws.Cell(8, 5).Style.Border.SetTopBorderColor(XLColor.Red); ws.Cell(8, 5).Style.Border.SetRightBorderColor(XLColor.Red); ws.Cell(8, 5).Style.Border.SetBottomBorderColor(XLColor.Red); ws.Cell(8, 5).Style.Border.SetLeftBorderColor(XLColor.Red); var panel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("TestRange"), report, report.TemplateProcessor) { ShiftType = ShiftType.NoShift, }; panel.Render(); Assert.AreEqual(ws.Range(2, 2, 7, 5), panel.ResultRange); ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelIEnumerableRenderTest), nameof(TestRenderIEnumerableVerticalNoShift)), ws.Workbook); //report.Workbook.SaveAs("test.xlsx"); }
public void Test_HorizontalPanelsGrouping_ChildLeft_ParentRowShiftChildRowShift_WithFictitiousColumn() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange parentRange = ws.Range(2, 2, 5, 4); parentRange.AddToNamed("ParentRange", XLScope.Worksheet); IXLRange child = ws.Range(2, 3, 5, 3); child.AddToNamed("ChildRange", XLScope.Worksheet); child.Range(2, 1, 4, 1).Style.Border.OutsideBorder = XLBorderStyleValues.Thin; child.Range(2, 1, 4, 1).Style.Border.OutsideBorderColor = XLColor.Red; parentRange.Style.Border.OutsideBorder = XLBorderStyleValues.Thin; parentRange.Style.Border.OutsideBorderColor = XLColor.Black; ws.Cell(2, 4).Value = "{di:Name}"; ws.Cell(3, 4).Value = "{di:Date}"; ws.Cell(3, 3).Value = "{di:Field1}"; ws.Cell(4, 3).Value = "{di:Field2}"; ws.Cell(5, 3).Value = "{di:parent:Sum}"; ws.Cell(1, 1).Value = "{di:Name}"; ws.Cell(1, 3).Value = "{di:Name}"; ws.Cell(1, 5).Value = "{di:Name}"; ws.Cell(3, 1).Value = "{di:Name}"; ws.Cell(3, 5).Value = "{di:Name}"; ws.Cell(6, 1).Value = "{di:Name}"; ws.Cell(6, 3).Value = "{di:Name}"; ws.Cell(6, 5).Value = "{di:Name}"; var parentPanel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("ParentRange"), report, report.TemplateProcessor) { Type = PanelType.Horizontal, ShiftType = ShiftType.Row, }; var childPanel = new ExcelDataSourcePanel("m:DataProvider:GetChildIEnumerable(di:Name)", ws.NamedRange("ChildRange"), report, report.TemplateProcessor) { Parent = parentPanel, Type = PanelType.Horizontal, ShiftType = ShiftType.Row, }; parentPanel.Children = new[] { childPanel }; parentPanel.Render(); Assert.AreEqual(ws.Range(2, 2, 5, 12), parentPanel.ResultRange); ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelRender_WithGrouping_HorizontalPanels_ChildLeft_Test), "ParentRowShiftChildRowShift_WithFictitiousColumn"), ws.Workbook); //report.Workbook.SaveAs("test.xlsx"); }
public void TestIfGroupByPropertyIsEmpty() { var wb = new XLWorkbook(); IXLWorksheet ws = wb.AddWorksheet("Test"); IXLRange range = ws.Range(2, 2, 6, 3); ws.Cell(2, 2).Value = "One"; ws.Cell(3, 2).Value = "One"; ws.Cell(4, 2).Value = "Two"; ws.Cell(5, 2).Value = "Three"; ws.Cell(6, 2).Value = "Three"; ws.Cell(7, 2).Value = "Three"; ws.Cell(8, 2).Value = "Four"; ws.Cell(9, 2).Value = "Five"; ws.Cell(2, 3).Value = "Orange"; ws.Cell(3, 3).Value = "Apple"; ws.Cell(4, 3).Value = "Apple"; ws.Cell(5, 3).Value = string.Empty; ws.Cell(6, 3).Value = null; ws.Cell(8, 3).Value = "Pear"; ws.Cell(9, 3).Value = "Pear"; var panel = new ExcelDataSourcePanel("Stub", Substitute.For <IXLNamedRange>(), new object(), Substitute.For <ITemplateProcessor>()) { GroupBy = null }; var method = panel.GetType().GetMethod("GroupResult", BindingFlags.Instance | BindingFlags.NonPublic); SetResultRange(panel, range); method.Invoke(panel, null); Assert.AreEqual(0, ws.MergedRanges.Count); panel = new ExcelDataSourcePanel("Stub", Substitute.For <IXLNamedRange>(), new object(), Substitute.For <ITemplateProcessor>()) { GroupBy = string.Empty }; SetResultRange(panel, range); method.Invoke(panel, null); Assert.AreEqual(0, ws.MergedRanges.Count); panel = new ExcelDataSourcePanel("Stub", Substitute.For <IXLNamedRange>(), new object(), Substitute.For <ITemplateProcessor>()) { GroupBy = " " }; SetResultRange(panel, range); method.Invoke(panel, null); Assert.AreEqual(0, ws.MergedRanges.Count); //wb.SaveAs("test.xlsx"); }
public void Test_VerticalPanelsGrouping_ChildTop_ParentNoShiftChildCellsShift_WithFictitiousRowWhichDeleteAfterRender() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange parentRange = ws.Range(2, 2, 4, 5); parentRange.AddToNamed("ParentRange", XLScope.Worksheet); IXLRange child = ws.Range(3, 2, 3, 5); child.AddToNamed("ChildRange", XLScope.Worksheet); child.Range(1, 2, 1, 4).Style.Border.OutsideBorder = XLBorderStyleValues.Thin; child.Range(1, 2, 1, 4).Style.Border.OutsideBorderColor = XLColor.Red; parentRange.Style.Border.OutsideBorder = XLBorderStyleValues.Thin; parentRange.Style.Border.OutsideBorderColor = XLColor.Black; ws.Cell(4, 2).Value = "{di:Name}"; ws.Cell(4, 3).Value = "{di:Date}"; ws.Cell(3, 3).Value = "{di:Field1}"; ws.Cell(3, 4).Value = "{di:Field2}"; ws.Cell(3, 5).Value = "{di:parent:Sum}"; ws.Cell(1, 1).Value = "{di:Name}"; ws.Cell(5, 1).Value = "{di:Name}"; ws.Cell(1, 6).Value = "{di:Name}"; ws.Cell(5, 6).Value = "{di:Name}"; ws.Cell(3, 1).Value = "{di:Name}"; ws.Cell(3, 6).Value = "{di:Name}"; ws.Cell(1, 4).Value = "{di:Name}"; ws.Cell(5, 4).Value = "{di:Name}"; var parentPanel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("ParentRange"), report, report.TemplateProcessor) { AfterDataItemRenderMethodName = "AfterRenderParentDataSourcePanelChildTop", ShiftType = ShiftType.NoShift, }; var childPanel = new ExcelDataSourcePanel("m:DataProvider:GetChildIEnumerable(di:Name)", ws.NamedRange("ChildRange"), report, report.TemplateProcessor) { Parent = parentPanel, }; parentPanel.Children = new[] { childPanel }; parentPanel.Render(); Assert.AreEqual(ws.Range(2, 2, 9, 5), parentPanel.ResultRange); ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelRender_WithGrouping_VerticalPanels_ChildTop_Test), "ParentNoShiftChildCellsShift_WithFictitiousRowWhichDeleteAfterRender"), ws.Workbook); //report.Workbook.SaveAs("test.xlsx"); }
public void Test_VerticalPageBreaks_WithSimplePanel_RowShift() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange parentRange = ws.Range(2, 2, 5, 4); parentRange.AddToNamed("ParentRange", XLScope.Worksheet); parentRange.Style.Border.OutsideBorder = XLBorderStyleValues.Thin; IXLRange child1 = ws.Range(2, 3, 5, 3); child1.AddToNamed("ChildRange1", XLScope.Worksheet); IXLRange child2 = ws.Range(2, 4, 5, 4); child2.AddToNamed("ChildRange2", XLScope.Worksheet); ws.Cell(2, 2).Value = "{di:Name}"; ws.Cell(3, 2).Value = "{di:Date}"; ws.Cell(3, 3).Value = "{di:Field1}"; ws.Cell(4, 3).Value = "{di:Field2}"; ws.Cell(5, 3).Value = "{di:parent:Sum}"; ws.Cell(2, 4).Value = "{VertPageBreak}"; var parentPanel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("ParentRange"), report, report.TemplateProcessor) { Type = PanelType.Horizontal, ShiftType = ShiftType.Row, }; var childPanel1 = new ExcelDataSourcePanel("m:DataProvider:GetChildIEnumerable(di:Name)", ws.NamedRange("ChildRange1"), report, report.TemplateProcessor) { Parent = parentPanel, Type = PanelType.Horizontal, ShiftType = ShiftType.Row, }; var childPanel2 = new ExcelNamedPanel(ws.NamedRange("ChildRange2"), report, report.TemplateProcessor) { Parent = parentPanel, }; parentPanel.Children = new[] { childPanel1, childPanel2 }; parentPanel.Render(); Assert.AreEqual(ws.Range(2, 2, 5, 12), parentPanel.ResultRange); ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelRender_WithGrouping_PageBreaks_Test), "Test_VerticalPageBreaks"), ws.Workbook); //report.Workbook.SaveAs("test.xlsx"); }
public void Test_TwoChildren_Horizontal() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange parentRange = ws.Range(2, 2, 5, 6); parentRange.AddToNamed("ParentRange", XLScope.Worksheet); IXLRange child1 = ws.Range(2, 4, 5, 4); child1.AddToNamed("ChildRange1", XLScope.Worksheet); IXLRange child2 = ws.Range(2, 6, 5, 6); child2.AddToNamed("ChildRange2", XLScope.Worksheet); ws.Cell(2, 2).Value = "{di:Name}"; ws.Cell(3, 3).Value = "Field1"; ws.Cell(3, 3).Style.Font.Bold = true; ws.Cell(4, 3).Value = "Field2"; ws.Cell(4, 3).Style.Font.Bold = true; ws.Cell(3, 4).Value = "{di:Field1}"; ws.Cell(4, 4).Value = "{di:Field2}"; ws.Cell(5, 5).Value = "Number"; ws.Cell(5, 5).Style.Font.Bold = true; ws.Cell(5, 6).Value = "{di:di}"; var parentPanel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("ParentRange"), report, report.TemplateProcessor); var childPanel1 = new ExcelDataSourcePanel("m:DataProvider:GetChildIEnumerable(di:Name)", ws.NamedRange("ChildRange1"), report, report.TemplateProcessor) { Parent = parentPanel, Type = PanelType.Horizontal, }; var childPanel2 = new ExcelDataSourcePanel("di:ChildrenPrimitive", ws.NamedRange("ChildRange2"), report, report.TemplateProcessor) { Parent = parentPanel, Type = PanelType.Horizontal, }; parentPanel.Children = new[] { childPanel1, childPanel2 }; parentPanel.Render(); Assert.AreEqual(ws.Range(2, 2, 13, 8), parentPanel.ResultRange); ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelRender_WithGrouping_MultipleChildrenInOneParent), nameof(Test_TwoChildren_Horizontal)), ws.Workbook); //report.Workbook.SaveAs("test.xlsx"); }
public void TestRenderDictionaryEnumerable() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange range1 = ws.Range(2, 2, 2, 4); range1.AddToNamed("TestRange1", XLScope.Worksheet); ws.Cell(2, 2).Value = "{di:Name}"; ws.Cell(2, 3).Value = "{di:Value}"; ws.Cell(2, 4).Value = "{di:IsVip}"; var panel1 = new ExcelDataSourcePanel("m:DataProvider:GetDictionaryEnumerable()", ws.NamedRange("TestRange1"), report, report.TemplateProcessor); panel1.Render(); var dictWithDecimalValues = new List <IDictionary <string, decimal> > { new Dictionary <string, decimal> { ["Value"] = 25.7m }, new Dictionary <string, decimal> { ["Value"] = 250.7m }, new Dictionary <string, decimal> { ["Value"] = 2500.7m }, }; IXLRange range2 = ws.Range(2, 6, 2, 6); range2.AddToNamed("TestRange2", XLScope.Worksheet); ws.Cell(2, 6).Value = "{di:Value}"; var panel2 = new ExcelDataSourcePanel(dictWithDecimalValues, ws.NamedRange("TestRange2"), report, report.TemplateProcessor); panel2.Render(); Assert.AreEqual(ws.Range(2, 2, 4, 4), panel1.ResultRange); Assert.AreEqual(ws.Range(2, 6, 4, 6), panel2.ResultRange); ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelDictionaryRenderTest), nameof(TestRenderDictionaryEnumerable)), ws.Workbook); //report.Workbook.SaveAs("test.xlsx"); }
public void TestSimplePanelExpansion() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange simplePanelRange = ws.Range(1, 1, 3, 5); var simplePanel = new ExcelPanel(simplePanelRange, report, report.TemplateProcessor); IXLRange dataPanelRange = ws.Range(2, 2, 2, 5); dataPanelRange.AddToNamed("d_Data", XLScope.Worksheet); ws.Cell(2, 2).Value = "{di:Name}"; ws.Cell(2, 3).Value = "{di:Date}"; ws.Cell(2, 4).Value = "{di:Sex}"; ws.Cell(2, 5).Value = "{di:Sum}"; var dataPanel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("d_Data"), report, report.TemplateProcessor) { Parent = simplePanel, }; IXLRange totalsPanelRange = ws.Range(3, 2, 3, 5); totalsPanelRange.AddToNamed("t_Totals", XLScope.Worksheet); ws.Cell(3, 2).Value = "{Max(di:Name)}"; ws.Cell(3, 3).Value = "{Min(di:Date)}"; ws.Cell(3, 4).Value = "{Max(di:Sex)}"; ws.Cell(3, 5).Value = "{Sum(di:Sum)}"; var totalsPanel = new ExcelTotalsPanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("t_Totals"), report, report.TemplateProcessor) { Parent = simplePanel, }; simplePanel.Children = new[] { dataPanel, totalsPanel }; simplePanel.Render(); Assert.AreEqual(ws.Range(1, 1, 5, 5), simplePanel.ResultRange); ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(PanelRenderTest), nameof(TestSimplePanelExpansion)), ws.Workbook); //report.Workbook.SaveAs("test.xlsx"); }
public void TestCopyIfDataIsSet() { var wb = new XLWorkbook(); IXLWorksheet ws = wb.AddWorksheet("Test"); var excelReport = Substitute.For <object>(); var templateProcessor = Substitute.For <ITemplateProcessor>(); IXLRange range = ws.Range(1, 1, 2, 4); range.AddToNamed("DataPanel", XLScope.Worksheet); IXLNamedRange namedRange = ws.NamedRange("DataPanel"); object[] data = { 1, "One" }; var panel = new ExcelDataSourcePanel(data, namedRange, excelReport, templateProcessor) { RenderPriority = 10, Type = PanelType.Horizontal, ShiftType = ShiftType.NoShift, BeforeRenderMethodName = "BeforeRenderMethod", AfterRenderMethodName = "AfterRenderMethod", BeforeDataItemRenderMethodName = "BeforeDataItemRenderMethodName", AfterDataItemRenderMethodName = "AfterDataItemRenderMethodName", GroupBy = "2,4", }; ExcelDataSourcePanel copiedPanel = (ExcelDataSourcePanel)panel.Copy(ws.Cell(5, 5)); Assert.AreSame(excelReport, copiedPanel.GetType().GetField("_report", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(copiedPanel)); Assert.AreSame(templateProcessor, copiedPanel.GetType().GetField("_templateProcessor", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(copiedPanel)); Assert.IsNull(copiedPanel.GetType().GetField("_dataSourceTemplate", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(copiedPanel)); Assert.AreSame(data, copiedPanel.GetType().GetField("_data", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(copiedPanel)); Assert.AreEqual(ws.Cell(5, 5), copiedPanel.Range.FirstCell()); Assert.AreEqual(ws.Cell(6, 8), copiedPanel.Range.LastCell()); Assert.AreEqual(10, copiedPanel.RenderPriority); Assert.AreEqual(PanelType.Horizontal, copiedPanel.Type); Assert.AreEqual(ShiftType.NoShift, copiedPanel.ShiftType); Assert.AreEqual("BeforeRenderMethod", copiedPanel.BeforeRenderMethodName); Assert.AreEqual("AfterRenderMethod", copiedPanel.AfterRenderMethodName); Assert.AreEqual("BeforeDataItemRenderMethodName", copiedPanel.BeforeDataItemRenderMethodName); Assert.AreEqual("AfterDataItemRenderMethodName", copiedPanel.AfterDataItemRenderMethodName); Assert.AreEqual("2,4", copiedPanel.GroupBy); Assert.IsNull(copiedPanel.Parent); //wb.SaveAs("test.xlsx"); }
public void TestPanelRenderWithParentContext() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange parentRange = ws.Range(2, 2, 3, 5); parentRange.AddToNamed("ParentRange", XLScope.Worksheet); IXLRange child1 = ws.Range(2, 2, 2, 5); child1.AddToNamed("ChildRange1", XLScope.Worksheet); IXLRange child2 = ws.Range(3, 2, 3, 5); child2.AddToNamed("ChildRange2", XLScope.Worksheet); ws.Cell(2, 2).Value = "{di:Field1}"; ws.Cell(2, 3).Value = "{di:Field2}"; ws.Cell(3, 2).Value = "{Count(di:Field1)}"; ws.Cell(3, 3).Value = "{Max(di:Field2)}"; ws.Cell(3, 4).Value = "{Max(di:parent:Sum)}"; ws.Cell(3, 5).Value = "{di:parent:Name}"; var parentPanel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("ParentRange"), report, report.TemplateProcessor); var childPanel1 = new ExcelDataSourcePanel("m:DataProvider:GetChildIEnumerable(di:Name)", ws.NamedRange("ChildRange1"), report, report.TemplateProcessor) { Parent = parentPanel, }; var childPanel2 = new ExcelTotalsPanel("m:DataProvider:GetChildIEnumerable(di:Name)", ws.NamedRange("ChildRange2"), report, report.TemplateProcessor) { Parent = parentPanel }; parentPanel.Children = new[] { childPanel1, childPanel2 }; parentPanel.Render(); Assert.AreEqual(ws.Range(2, 2, 9, 5), parentPanel.ResultRange); ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(TotalsPanelRenderTest), nameof(TestPanelRenderWithParentContext)), ws.Workbook); //report.Workbook.SaveAs("test.xlsx"); }
public void TestRenderDictionary() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange range1 = ws.Range(2, 2, 2, 3); range1.AddToNamed("TestRange", XLScope.Worksheet); IXLRange range2 = ws.Range(2, 5, 2, 6); range2.AddToNamed("TestRange2", XLScope.Worksheet); ws.Cell(1, 2).Value = "Key"; ws.Cell(1, 3).Value = "Value"; ws.Cell(2, 2).Value = "{di:Key}"; ws.Cell(2, 3).Value = "{di:Value}"; ws.Cell(1, 5).Value = "Key"; ws.Cell(1, 6).Value = "Value"; ws.Cell(2, 5).Value = "{di:Key}"; ws.Cell(2, 6).Value = "{di:Value}"; IDictionary <string, object> data1 = new DataProvider().GetDictionaryEnumerable().First(); var panel1 = new ExcelDataSourcePanel(data1, ws.NamedRange("TestRange"), report, report.TemplateProcessor); panel1.Render(); IEnumerable <KeyValuePair <string, object> > data2 = new DataProvider().GetDictionaryEnumerable().First() .Select(x => new KeyValuePair <string, object>(x.Key, x.Value)); var panel2 = new ExcelDataSourcePanel(data2, ws.NamedRange("TestRange2"), report, report.TemplateProcessor); panel2.Render(); Assert.AreEqual(ws.Range(2, 2, 4, 3), panel1.ResultRange); Assert.AreEqual(ws.Range(2, 5, 4, 6), panel2.ResultRange); ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelDictionaryRenderTest), nameof(TestRenderDictionary)), ws.Workbook); //report.Workbook.SaveAs("test.xlsx"); }
public void TestRenderIEnumerableOfString() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange range = ws.Range(2, 2, 2, 2); range.AddToNamed("TestRange", XLScope.Worksheet); ws.Cell(2, 2).Value = "{di:di}"; var panel = new ExcelDataSourcePanel(new[] { "One", "Two", "Three", "Four" }, ws.NamedRange("TestRange"), report, report.TemplateProcessor); panel.Render(); Assert.AreEqual(ws.Range(2, 2, 5, 2), panel.ResultRange); ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelIEnumerableRenderTest), nameof(TestRenderIEnumerableOfString)), ws.Workbook); //report.Workbook.SaveAs("test.xlsx"); }
public void TestRenderNullItemHorizontalNoShift() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange range = ws.Range(2, 2, 3, 5); range.AddToNamed("TestRange", XLScope.Worksheet); ws.Cell(2, 2).Value = "{di:Name}"; ws.Cell(2, 3).Value = "{di:Date}"; ws.Cell(2, 4).Value = "{m:Multiply(di:Sum, 5)}"; ws.Cell(2, 5).Value = "{di:Contacts}"; ws.Cell(3, 2).Value = "{di:Contacts.Phone}"; ws.Cell(3, 3).Value = "{di:Contacts.Fax}"; ws.Cell(3, 4).Value = "{p:StrParam}"; ws.Cell(1, 1).Value = "{di:Name}"; ws.Cell(4, 1).Value = "{di:Name}"; ws.Cell(1, 6).Value = "{di:Name}"; ws.Cell(4, 6).Value = "{di:Name}"; ws.Cell(3, 1).Value = "{di:Name}"; ws.Cell(3, 6).Value = "{di:Name}"; ws.Cell(1, 4).Value = "{di:Name}"; ws.Cell(4, 4).Value = "{di:Name}"; var panel = new ExcelDataSourcePanel("m:DataProvider:GetNullItem()", ws.NamedRange("TestRange"), report, report.TemplateProcessor) { Type = PanelType.Horizontal, ShiftType = ShiftType.NoShift, }; panel.Render(); Assert.IsNull(panel.ResultRange); ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelNullItemRenderTest), nameof(TestRenderNullItemHorizontalNoShift)), ws.Workbook); //report.Workbook.SaveAs("test.xlsx"); }
// Rendering speed test //[Test] public void TestPanelRenderSpeed() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange range = ws.Range(2, 2, 2, 6); range.AddToNamed("TestRange", XLScope.Worksheet); ws.Cell(2, 2).Value = "{di:Name}"; ws.Cell(2, 3).Value = "{di:Date}"; ws.Cell(2, 4).Value = "{di:Sum}"; ws.Cell(2, 5).Value = "{di:Contacts.Phone}"; ws.Cell(2, 6).Value = "{di:Contacts.Fax}"; const int dataCount = 6000; IList <TestItem> data = new List <TestItem>(dataCount); for (int i = 0; i < dataCount; i++) { data.Add(new TestItem($"Name_{i}", DateTime.Now.AddHours(1), i + 10, new Contacts($"Phone_{i}", $"Fax_{i}"))); } var panel = new ExcelDataSourcePanel(data, ws.NamedRange("TestRange"), report, report.TemplateProcessor) { //ShiftType = ShiftType.Row, //ShiftType = ShiftType.NoShift, }; Stopwatch sw = Stopwatch.StartNew(); panel.Render(); sw.Stop(); //Stopwatch sw2 = Stopwatch.StartNew(); //report.Workbook.SaveAs("test.xlsx"); //sw2.Stop(); }
public void TestExpandSimplePanel_ChildAcrossWidth_ChildCenter_NoShift() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange parentRange = ws.Range(2, 2, 4, 5); parentRange.AddToNamed("ParentRange", XLScope.Worksheet); parentRange.Style.Border.OutsideBorder = XLBorderStyleValues.Thin; parentRange.Style.Border.OutsideBorderColor = XLColor.Black; IXLRange childRange = ws.Range(3, 2, 3, 5); childRange.AddToNamed("ChildRange", XLScope.Worksheet); childRange.Style.Border.OutsideBorder = XLBorderStyleValues.Dashed; childRange.Style.Border.OutsideBorderColor = XLColor.Blue; ws.Cell(2, 2).Value = "{p:StrParam}"; ws.Cell(3, 3).Value = "{di:Name}"; ws.Cell(3, 4).Value = "{di:Date}"; ws.Cell(3, 5).Value = "{di:Sum}"; var parentPanel = new ExcelPanel(parentRange, report, report.TemplateProcessor); var childPanel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("ChildRange"), report, report.TemplateProcessor) { Parent = parentPanel, ShiftType = ShiftType.NoShift, }; parentPanel.Children = new[] { childPanel }; parentPanel.Render(); Assert.AreEqual(ws.Range(2, 2, 5, 5), parentPanel.ResultRange); //report.Workbook.SaveAs("test.xlsx"); }
public void TestMakePanelsHierarchy() { var wb = new XLWorkbook(); IXLWorksheet ws = wb.AddWorksheet("Test"); IXLRange panel1Range = ws.Range(1, 1, 4, 4); IXLRange panel2Range = ws.Range(1, 1, 2, 4); panel2Range.AddToNamed("Panel2", XLScope.Worksheet); IXLRange panel3Range = ws.Range(2, 1, 2, 4); panel3Range.AddToNamed("Panel3", XLScope.Workbook); IXLRange panel4Range = ws.Range(5, 1, 6, 5); IXLRange panel5Range = ws.Range(6, 1, 6, 5); panel5Range.AddToNamed("Panel5", XLScope.Worksheet); IXLRange panel6Range = ws.Range(3, 1, 4, 4); IXLRange panel7Range = ws.Range(10, 10, 10, 10); IXLRange panel8Range = ws.Range(8, 9, 9, 10); panel8Range.AddToNamed("Panel8", XLScope.Worksheet); var panel1 = new ExcelPanel(panel1Range, new object(), Substitute.For <ITemplateProcessor>()); var panel2 = new ExcelDataSourcePanel("Stub", ws.NamedRange("Panel2"), new object(), Substitute.For <ITemplateProcessor>()); var panel3 = new ExcelDataSourcePanel("Stub", wb.NamedRange("Panel3"), new object(), Substitute.For <ITemplateProcessor>()); var panel4 = new ExcelPanel(panel4Range, new object(), Substitute.For <ITemplateProcessor>()); var panel5 = new ExcelDataSourceDynamicPanel("Stub", ws.NamedRange("Panel5"), new object(), Substitute.For <ITemplateProcessor>()); var panel6 = new ExcelPanel(panel6Range, new object(), Substitute.For <ITemplateProcessor>()); var panel7 = new ExcelPanel(panel7Range, new object(), Substitute.For <ITemplateProcessor>()); var panel8 = new ExcelTotalsPanel("Stub", ws.NamedRange("Panel8"), new object(), Substitute.For <ITemplateProcessor>()); IDictionary <string, (IExcelPanel, string)> panelsFlatView = new Dictionary <string, (IExcelPanel, string)> {
public void TestCancelPanelRender() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange range = ws.Range(2, 2, 2, 2); range.AddToNamed("TestRange", XLScope.Worksheet); ws.Cell(2, 2).Value = "{di:di}"; var panel = new ExcelDataSourcePanel(new[] { 1, 2, 3, 4 }, ws.NamedRange("TestRange"), report, report.TemplateProcessor) { BeforeRenderMethodName = "CancelPanelRender", }; panel.Render(); Assert.AreEqual(range, panel.ResultRange); Assert.AreEqual(1, ws.CellsUsed(XLCellsUsedOptions.Contents).Count()); Assert.AreEqual("{di:di}", ws.Cell(2, 2).Value); //report.Workbook.SaveAs("test.xlsx"); }
public void TestMultipleHorizontalPanelsGrouping() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange parentRange = ws.Range(2, 2, 7, 6); parentRange.AddToNamed("ParentRange", XLScope.Worksheet); IXLRange simpleRange1 = ws.Range(3, 3, 4, 3); simpleRange1.AddToNamed("simpleRange1"); IXLRange child = ws.Range(2, 4, 7, 6); child.AddToNamed("ChildRange", XLScope.Worksheet); IXLRange childOfChild = ws.Range(2, 5, 7, 6); childOfChild.AddToNamed("ChildOfChildRange"); IXLRange simpleRange2 = ws.Range(5, 6, 7, 6); simpleRange2.AddToNamed("simpleRange2", XLScope.Worksheet); simpleRange2.Style.Border.OutsideBorder = XLBorderStyleValues.Thin; simpleRange2.Style.Border.OutsideBorderColor = XLColor.Orange; childOfChild.Range(3, 1, 6, 2).Style.Border.OutsideBorder = XLBorderStyleValues.Thin; childOfChild.Range(3, 1, 6, 2).Style.Border.OutsideBorderColor = XLColor.Green; child.Range(2, 1, 6, 3).Style.Border.OutsideBorder = XLBorderStyleValues.Thin; child.Range(2, 1, 6, 3).Style.Border.OutsideBorderColor = XLColor.Red; simpleRange1.Style.Border.OutsideBorder = XLBorderStyleValues.Thin; simpleRange1.Style.Border.OutsideBorderColor = XLColor.Brown; parentRange.Style.Border.OutsideBorder = XLBorderStyleValues.Thin; parentRange.Style.Border.OutsideBorderColor = XLColor.Black; ws.Cell(2, 2).Value = "{di:Name}"; ws.Cell(3, 2).Value = "{di:Date}"; ws.Cell(3, 3).Value = "{p:StrParam}"; ws.Cell(4, 3).Value = "{di:Sum}"; ws.Cell(5, 3).Value = "{p:IntParam}"; ws.Cell(3, 4).Value = "{di:Field1}"; ws.Cell(4, 4).Value = "{di:Field2}"; ws.Cell(5, 4).Value = "{di:parent:Sum}"; ws.Cell(6, 4).Value = "{di:parent:Contacts}"; ws.Cell(4, 5).Value = "{di:Field1}"; ws.Cell(5, 5).Value = "{di:Field2}"; ws.Cell(6, 5).Value = "{di:parent:Field1}"; ws.Cell(7, 5).Value = "{di:parent:parent:Contacts.Phone}"; ws.Cell(5, 6).Value = "{p:DateParam}"; ws.Cell(6, 6).Value = "{di:parent:Field2}"; ws.Cell(7, 6).Value = "{di:parent:parent:Contacts.Fax}"; var parentPanel = new ExcelDataSourcePanel("m:DataProvider:GetIEnumerable()", ws.NamedRange("ParentRange"), report, report.TemplateProcessor) { Type = PanelType.Horizontal, }; var simplePanel1 = new ExcelNamedPanel(ws.Workbook.NamedRange("simpleRange1"), report, report.TemplateProcessor) { Parent = parentPanel, }; var childPanel = new ExcelDataSourcePanel("m:DataProvider:GetChildIEnumerable(di:Name)", ws.NamedRange("ChildRange"), report, report.TemplateProcessor) { Parent = parentPanel, Type = PanelType.Horizontal, }; var childOfChildPanel = new ExcelDataSourcePanel("di:Children", ws.Workbook.NamedRange("ChildOfChildRange"), report, report.TemplateProcessor) { Parent = childPanel, Type = PanelType.Horizontal, }; var simplePanel2 = new ExcelNamedPanel(ws.NamedRange("simpleRange2"), report, report.TemplateProcessor) { Parent = childOfChildPanel, }; childOfChildPanel.Children = new[] { simplePanel2 }; childPanel.Children = new[] { childOfChildPanel }; parentPanel.Children = new[] { childPanel, simplePanel1 }; parentPanel.Render(); Assert.AreEqual(ws.Range(2, 2, 7, 20), parentPanel.ResultRange); ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(DataSourcePanelRender_WithGrouping_MixedPanels_Test), nameof(TestMultipleHorizontalPanelsGrouping)), ws.Workbook); //report.Workbook.SaveAs("test.xlsx"); }
public void TestGroupResultHorizontal() { var wb = new XLWorkbook(); IXLWorksheet ws = wb.AddWorksheet("Test"); IXLRange range = ws.Range(2, 2, 6, 9); ws.Cell(2, 2).Value = "One"; ws.Cell(2, 3).Value = "One"; ws.Cell(2, 4).Value = "Two"; ws.Cell(2, 5).Value = "Three"; ws.Cell(2, 6).Value = "Three"; ws.Cell(2, 7).Value = "Three"; ws.Cell(2, 8).Value = "Four"; ws.Cell(2, 9).Value = "Five"; ws.Range(2, 5, 2, 6).Merge(); ws.Cell(3, 2).Value = "Orange"; ws.Cell(3, 3).Value = "Apple"; ws.Cell(3, 4).Value = "Apple"; ws.Cell(3, 5).Value = string.Empty; ws.Cell(3, 6).Value = null; ws.Cell(3, 8).Value = "Pear"; ws.Cell(3, 9).Value = "Pear"; ws.Cell(4, 2).Value = true; ws.Cell(4, 3).Value = true; ws.Cell(4, 4).Value = 1; ws.Cell(4, 5).Value = null; ws.Cell(4, 7).Value = 0; ws.Cell(4, 8).Value = false; ws.Cell(4, 9).Value = false; ws.Cell(5, 2).Value = 1; ws.Cell(5, 3).Value = 1; ws.Cell(5, 4).Value = 1; ws.Cell(5, 5).Value = 56; ws.Cell(5, 6).Value = 56.1; ws.Cell(5, 7).Value = 56; ws.Cell(5, 8).Value = 77.7; ws.Cell(5, 9).Value = 77.7m; ws.Range(5, 3, 5, 4).Merge(); ws.Cell(6, 2).Value = new DateTime(2018, 2, 18); ws.Cell(6, 3).Value = new DateTime(2018, 2, 20); ws.Cell(6, 4).Value = new DateTime(2018, 2, 20); ws.Cell(6, 5).Value = new DateTime(2018, 2, 18); ws.Cell(6, 6).Value = null; ws.Cell(6, 8).Value = new DateTime(2018, 2, 21); ws.Cell(6, 9).Value = new DateTime(2018, 2, 21).ToString(); var panel = new ExcelDataSourcePanel("Stub", Substitute.For <IXLNamedRange>(), new object(), Substitute.For <ITemplateProcessor>()) { GroupBy = "1,2, 3 , 4,5", Type = PanelType.Horizontal, }; var method = panel.GetType().GetMethod("GroupResult", BindingFlags.Instance | BindingFlags.NonPublic); SetResultRange(panel, range); method.Invoke(panel, null); ExcelAssert.AreWorkbooksContentEquals(TestHelper.GetExpectedWorkbook(nameof(ExcelDataSourcePanelTest), nameof(TestGroupResultHorizontal)), wb); //wb.SaveAs("test.xlsx"); }
// Rendering speed test //[Test] public void TestPanelRenderSpeedWithMultiHierarchy() { var report = new TestReport(); IXLWorksheet ws = report.Workbook.AddWorksheet("Test"); IXLRange range = ws.Range(2, 2, 4, 6); range.AddToNamed("ParentRange", XLScope.Worksheet); ws.Cell(2, 2).Value = "{di:Name}"; ws.Cell(2, 3).Value = "{di:Date}"; ws.Cell(2, 4).Value = "{di:Sum}"; ws.Cell(2, 5).Value = "{di:Contacts.Phone}"; ws.Cell(2, 6).Value = "{di:Contacts.Fax}"; IXLRange child1 = ws.Range(3, 2, 4, 6); child1.AddToNamed("ChildRange1", XLScope.Worksheet); ws.Cell(3, 2).Value = "{di:Field1}"; ws.Cell(3, 3).Value = "{di:Field2}"; IXLRange child2 = ws.Range(4, 2, 4, 6); child2.AddToNamed("ChildRange2", XLScope.Worksheet); ws.Cell(4, 5).Value = "{di:Field1}"; ws.Cell(4, 6).Value = "{di:Field2}"; const int dataCount = 50; IList <TestItem> data = new List <TestItem>(dataCount); for (int i = 0; i < dataCount; i++) { data.Add(new TestItem($"Name_{i}", DateTime.Now.AddHours(1), i + 1, new Contacts($"Phone_{i}", $"Fax_{i}"))); } var parentPanel = new ExcelDataSourcePanel(data, ws.NamedRange("ParentRange"), report, report.TemplateProcessor) { //ShiftType = ShiftType.Row, //ShiftType = ShiftType.NoShift, }; var childPanel1 = new ExcelDataSourcePanel("m:DataProvider:GetChildrenRandom(4, 6)", ws.NamedRange("ChildRange1"), report, report.TemplateProcessor) { //ShiftType = ShiftType.Row, //ShiftType = ShiftType.NoShift, Parent = parentPanel, }; var childPanel2 = new ExcelDataSourcePanel("m:DataProvider:GetChildrenRandom(10, 15)", ws.NamedRange("ChildRange2"), report, report.TemplateProcessor) { //ShiftType = ShiftType.Row, //ShiftType = ShiftType.NoShift, Parent = childPanel1, }; parentPanel.Children.Add(childPanel1); childPanel1.Children.Add(childPanel2); Stopwatch sw = Stopwatch.StartNew(); parentPanel.Render(); sw.Stop(); //Stopwatch sw2 = Stopwatch.StartNew(); //report.Workbook.SaveAs("test.xlsx"); //sw2.Stop(); }