|
|
@@ -17,7 +17,8 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
|
|
|
{
|
|
|
public delegate void CustomizeColumnsCollectionEventHandler(object source, ColumnsCreationEventArgs e);
|
|
|
public delegate void CustomizeColumnEventHandler(object source, ControlCustomizationEventArgs e);
|
|
|
- public delegate void CustomizeColumnSummaryEventHandler(object source, ColumnSummaryCreationEventArgs e);
|
|
|
+ public delegate void CustomizeColumnTotalSummaryEventHandler(object source, ColumnSummaryCreationEventArgs e);
|
|
|
+ public delegate void CustomizeColumnGroupSummaryEventHandler(object source, ColumnSummaryCreationEventArgs e);
|
|
|
|
|
|
public class MVCReportGeneratonHelper
|
|
|
{
|
|
|
@@ -33,7 +34,8 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
|
|
|
|
|
|
public event CustomizeColumnsCollectionEventHandler CustomizeColumnsCollection;
|
|
|
public event CustomizeColumnEventHandler CustomizeColumn;
|
|
|
- public event CustomizeColumnSummaryEventHandler CustomizeColumnSummary;
|
|
|
+ public event CustomizeColumnTotalSummaryEventHandler CustomizeTotalColumnSummary;
|
|
|
+ public event CustomizeColumnGroupSummaryEventHandler CustomizeGroupColumnSummary;
|
|
|
|
|
|
public XtraReport GenerateMVCReport(MVCxGridViewState gridViewState, object model)
|
|
|
{
|
|
|
@@ -47,6 +49,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
|
|
|
InitStyles();
|
|
|
InitDataSource(model);
|
|
|
InitDetailsAndPageHeader(gridViewState);
|
|
|
+ InitDetailReports(gridViewState);
|
|
|
InitSortings(gridViewState);
|
|
|
InitGroupHeaders(gridViewState);
|
|
|
InitFilters(gridViewState);
|
|
|
@@ -60,8 +63,8 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
|
|
|
report.StyleSheet.Add(new XRControlStyle
|
|
|
{
|
|
|
Name = "OddRow",
|
|
|
- Borders = (DevExpress.XtraPrinting.BorderSide.Bottom |
|
|
|
- DevExpress.XtraPrinting.BorderSide.Left |
|
|
|
+ Borders = (DevExpress.XtraPrinting.BorderSide.Bottom |
|
|
|
+ DevExpress.XtraPrinting.BorderSide.Left |
|
|
|
DevExpress.XtraPrinting.BorderSide.Right),
|
|
|
Padding = new PaddingInfo(30, 600)
|
|
|
});
|
|
|
@@ -85,6 +88,15 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
|
|
|
Font = new Font(report.Font, FontStyle.Bold)
|
|
|
});
|
|
|
|
|
|
+ report.StyleSheet.Add(new XRControlStyle
|
|
|
+ {
|
|
|
+ Name = "GroupHeader",
|
|
|
+ BackColor = Color.Beige,
|
|
|
+ Borders = DevExpress.XtraPrinting.BorderSide.All,
|
|
|
+ Padding = new PaddingInfo(30, 600),
|
|
|
+ Font = new Font(report.Font, FontStyle.Bold)
|
|
|
+ });
|
|
|
+
|
|
|
report.StyleSheet.Add(new XRControlStyle
|
|
|
{
|
|
|
Name = "SummaryRow",
|
|
|
@@ -95,6 +107,22 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
|
|
|
ForeColor = Color.White,
|
|
|
Font = new Font(report.Font, FontStyle.Bold)
|
|
|
});
|
|
|
+
|
|
|
+ report.StyleSheet.Add(new XRControlStyle
|
|
|
+ {
|
|
|
+ Name = "DetailRow",
|
|
|
+ BackColor = Color.FromArgb(209, 228, 255),
|
|
|
+ Borders = DevExpress.XtraPrinting.BorderSide.All
|
|
|
+ });
|
|
|
+
|
|
|
+ report.StyleSheet.Add(new XRControlStyle
|
|
|
+ {
|
|
|
+ Name = "DetailRowLabel",
|
|
|
+ Padding = new PaddingInfo(30, 600),
|
|
|
+ Borders = DevExpress.XtraPrinting.BorderSide.Bottom |
|
|
|
+ DevExpress.XtraPrinting.BorderSide.Left |
|
|
|
+ DevExpress.XtraPrinting.BorderSide.Right
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
private void InitDataSource(object model)
|
|
|
@@ -117,7 +145,8 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
|
|
|
|
|
|
report.Bands.Add(new DetailBand()
|
|
|
{
|
|
|
- HeightF = bandHeight
|
|
|
+ HeightF = bandHeight,
|
|
|
+ KeepTogetherWithDetailReports = true
|
|
|
});
|
|
|
report.Bands.Add(new PageHeaderBand()
|
|
|
{
|
|
|
@@ -167,8 +196,10 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
|
|
|
CustomizeColumn(report, cc);
|
|
|
|
|
|
if (cc.IsModified == false)
|
|
|
+ {
|
|
|
cell2.DataBindings.Add("Text", null, columns[i].FieldName,
|
|
|
"{0:" + columns[i].GridViewColumn.DisplayFormat + "}");
|
|
|
+ }
|
|
|
|
|
|
detailsInfo.Add(columns[i].GridViewColumn, cell2);
|
|
|
|
|
|
@@ -190,6 +221,70 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
|
|
|
report.Bands[BandKind.Detail].Controls.Add(detailTable);
|
|
|
}
|
|
|
|
|
|
+ private void InitDetailReports(MVCxGridViewState gridViewState)
|
|
|
+ {
|
|
|
+ var groupedColumns = gridViewState.GroupedColumns;
|
|
|
+
|
|
|
+ var pagewidth = (report.PageWidth - (report.Margins.Left + report.Margins.Right)) - groupedColumns.Count * subGroupOffset;
|
|
|
+ var columns = GetColumnsInfo(gridViewState, pagewidth);
|
|
|
+
|
|
|
+ if (CustomizeColumnsCollection != null)
|
|
|
+ CustomizeColumnsCollection(report, new ColumnsCreationEventArgs(pagewidth)
|
|
|
+ {
|
|
|
+ ColumnsInfo = columns
|
|
|
+ });
|
|
|
+
|
|
|
+ var detailColumns = columns
|
|
|
+ .Where(c => c.IsDetail)
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ if (!detailColumns.Any()) return;
|
|
|
+
|
|
|
+ var detailReportBand = new DetailReportBand()
|
|
|
+ {
|
|
|
+ HeightF = bandHeight
|
|
|
+ };
|
|
|
+ report.Bands.Add(detailReportBand);
|
|
|
+
|
|
|
+ var detailReportTable = new XRTable
|
|
|
+ {
|
|
|
+ OddStyleName = "DetailRow",
|
|
|
+ EvenStyleName = "DetailRow",
|
|
|
+ WidthF = pagewidth
|
|
|
+ };
|
|
|
+ var detailReportRow = new XRTableRow();
|
|
|
+
|
|
|
+ foreach (var detailColumn in detailColumns)
|
|
|
+ {
|
|
|
+ var cellDetail = new XRTableCell
|
|
|
+ {
|
|
|
+ WidthF = pagewidth / detailColumns.Count
|
|
|
+ };
|
|
|
+
|
|
|
+ var label = new XRLabel
|
|
|
+ {
|
|
|
+ StyleName = "DetailRowLabel",
|
|
|
+ WidthF = pagewidth / detailColumns.Count,
|
|
|
+ WordWrap = true
|
|
|
+ };
|
|
|
+
|
|
|
+ label.DataBindings.Add("Text", null, detailColumn.FieldName,
|
|
|
+ "{0:" + detailColumn.GridViewColumn.DisplayFormat + "}");
|
|
|
+
|
|
|
+ cellDetail.Controls.Add(label);
|
|
|
+
|
|
|
+ detailReportRow.Cells.Add(cellDetail);
|
|
|
+ }
|
|
|
+
|
|
|
+ detailReportTable.Rows.Add(detailReportRow);
|
|
|
+ detailReportTable.LocationF = new PointF(groupedColumns.Count * subGroupOffset, 0);
|
|
|
+
|
|
|
+ DetailBand detailBand = new DetailBand();
|
|
|
+ detailBand.Height = detailReportTable.Height;
|
|
|
+ detailReportBand.Bands.Add(detailBand);
|
|
|
+ detailBand.Controls.Add(detailReportTable);
|
|
|
+ }
|
|
|
+
|
|
|
private void InitSortings(MVCxGridViewState gridViewState)
|
|
|
{
|
|
|
var columns = gridViewState.Columns;
|
|
|
@@ -207,24 +302,67 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
|
|
|
|
|
|
private void InitGroupHeaders(MVCxGridViewState gridViewState)
|
|
|
{
|
|
|
- GridViewDataColumnStateCollection groupedColumns = gridViewState.GroupedColumns;
|
|
|
- for (int i = groupedColumns.Count - 1; i >= 0; i--)
|
|
|
+ var groupedColumns = gridViewState.GroupedColumns;
|
|
|
+
|
|
|
+ for (var i = groupedColumns.Count - 1; i >= 0; i--)
|
|
|
{
|
|
|
+ var groupedColumn = groupedColumns[i];
|
|
|
+ var gb = new GroupHeaderBand
|
|
|
+ {
|
|
|
+ Height = bandHeight
|
|
|
+ };
|
|
|
+
|
|
|
+ var groupHeaderTable = new XRTable
|
|
|
+ {
|
|
|
+ StyleName = "GroupHeader",
|
|
|
+ LocationF = new PointF(initialGroupOffset + i * 10, 0),
|
|
|
+ SizeF = new SizeF((report.PageWidth - (report.Margins.Left + report.Margins.Right)) - (initialGroupOffset + i * subGroupOffset), bandHeight)
|
|
|
+ };
|
|
|
+ var groupHeaderRow = new XRTableRow();
|
|
|
+
|
|
|
+ var l = new XRTableCell
|
|
|
+ {
|
|
|
+ Text = groupedColumn.Caption + ": [" + groupedColumn.FieldName + "]",
|
|
|
+ Borders = DevExpress.XtraPrinting.BorderSide.Left |
|
|
|
+ DevExpress.XtraPrinting.BorderSide.Top |
|
|
|
+ DevExpress.XtraPrinting.BorderSide.Bottom
|
|
|
+ };
|
|
|
+
|
|
|
+ groupHeaderRow.Cells.Add(l);
|
|
|
+
|
|
|
+ foreach (MVCxSummaryItemState item in gridViewState.TotalSummary)
|
|
|
{
|
|
|
- GridViewDataColumnState groupedColumn = groupedColumns[i];
|
|
|
- GroupHeaderBand gb = new GroupHeaderBand();
|
|
|
- gb.Height = bandHeight;
|
|
|
- XRLabel l = new XRLabel();
|
|
|
- l.Text = groupedColumn.FieldName + ": [" + groupedColumn.FieldName + "]";
|
|
|
- l.LocationF = new PointF(initialGroupOffset + i * 10, 0);
|
|
|
- l.BackColor = Color.Beige;
|
|
|
- l.SizeF = new SizeF((report.PageWidth - (report.Margins.Left + report.Margins.Right)) - (initialGroupOffset + i * subGroupOffset), bandHeight);
|
|
|
- gb.Controls.Add(l);
|
|
|
- gb.RepeatEveryPage = shouldRepeatGroupHeadersOnEveryPage;
|
|
|
- GroupField gf = new GroupField(groupedColumn.FieldName, groupedColumn.SortOrder == ColumnSortOrder.Ascending ? XRColumnSortOrder.Ascending : XRColumnSortOrder.Descending);
|
|
|
- gb.GroupFields.Add(gf);
|
|
|
- report.Bands.Add(gb);
|
|
|
+ var sum = new XRTableCell
|
|
|
+ {
|
|
|
+ Borders = DevExpress.XtraPrinting.BorderSide.Top |
|
|
|
+ DevExpress.XtraPrinting.BorderSide.Bottom
|
|
|
+ };
|
|
|
+
|
|
|
+ sum.Summary = new XRSummary
|
|
|
+ {
|
|
|
+ Running = SummaryRunning.Group
|
|
|
+ };
|
|
|
+ sum.Summary.Func = GetSummaryFunc(item.SummaryType);
|
|
|
+ sum.DataBindings.Add("Text", null, item.FieldName);
|
|
|
+
|
|
|
+ groupHeaderRow.Cells.Add(sum);
|
|
|
+
|
|
|
+ if (CustomizeGroupColumnSummary != null)
|
|
|
+ CustomizeGroupColumnSummary(report, new ColumnSummaryCreationEventArgs(item.FieldName, sum.Summary));
|
|
|
}
|
|
|
+
|
|
|
+ groupHeaderTable.Rows.Add(groupHeaderRow);
|
|
|
+ gb.Controls.Add(groupHeaderTable);
|
|
|
+
|
|
|
+ gb.RepeatEveryPage = shouldRepeatGroupHeadersOnEveryPage;
|
|
|
+
|
|
|
+ var gf = new GroupField(
|
|
|
+ groupedColumn.FieldName, groupedColumn.SortOrder == ColumnSortOrder.Ascending
|
|
|
+ ? XRColumnSortOrder.Ascending
|
|
|
+ : XRColumnSortOrder.Descending);
|
|
|
+
|
|
|
+ gb.GroupFields.Add(gf);
|
|
|
+ report.Bands.Add(gb);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -245,7 +383,9 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
|
|
|
|
|
|
foreach (MVCxSummaryItemState item in gridViewState.TotalSummary)
|
|
|
{
|
|
|
- var col = gridViewState.Columns[item.ShowInColumn == string.Empty ? item.FieldName : item.ShowInColumn];
|
|
|
+ var col = gridViewState.Columns[item.ShowInColumn == string.Empty
|
|
|
+ ? item.FieldName
|
|
|
+ : item.ShowInColumn];
|
|
|
|
|
|
if (col == null) continue;
|
|
|
|
|
|
@@ -253,7 +393,9 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
|
|
|
|
|
|
var label = new XRLabel
|
|
|
{
|
|
|
- LocationF = ((XRTableCell)detailsInfo[col]).LocationF,
|
|
|
+ LocationF = new PointF(
|
|
|
+ ((XRTableCell)detailsInfo[col]).LocationF.X + subGroupOffset * gridViewState.GroupedColumns.Count,
|
|
|
+ ((XRTableCell)detailsInfo[col]).LocationF.Y),
|
|
|
SizeF = ((XRTableCell)detailsInfo[col]).SizeF
|
|
|
};
|
|
|
label.DataBindings.Add("Text", null, col.FieldName);
|
|
|
@@ -266,8 +408,8 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
|
|
|
|
|
|
report.Bands[BandKind.ReportFooter].Controls.Add(label);
|
|
|
|
|
|
- if (CustomizeColumnSummary != null)
|
|
|
- CustomizeColumnSummary(report, new ColumnSummaryCreationEventArgs(col.FieldName, label.Summary));
|
|
|
+ if (CustomizeTotalColumnSummary != null)
|
|
|
+ CustomizeTotalColumnSummary(report, new ColumnSummaryCreationEventArgs(col.FieldName, label.Summary));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -559,6 +701,19 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
|
|
|
isVisible = value;
|
|
|
}
|
|
|
}
|
|
|
+ bool isDetail;
|
|
|
+
|
|
|
+ public bool IsDetail
|
|
|
+ {
|
|
|
+ get
|
|
|
+ {
|
|
|
+ return isDetail;
|
|
|
+ }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ isDetail = value;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|