Master-Detail problem
Posted: Sun Mar 10, 2013 2:47 pm
I tried to implement my first Master-Detail report but the details are repeat thru all groups.
Sample code to reproduce the problem:
var table1:DataTable = new DataTable("Customer");
table1.columns.add(new DataColumn("id", StorageType.IntType));
table1.columns.add(new DataColumn("groupid", StorageType.IntType));
table1.columns.add(new DataColumn("name", StorageType.StringType));
var row1:DataRow = table1.addNewRow();
row1.setValue("id", 1);
row1.setValue("groupid", 1);
row1.setValue("name", "Hugo");
var row2:DataRow = table1.addNewRow();
row2.setValue("id", 2);
row2.setValue("groupid", 2);
row2.setValue("name", "Afonso");
var table2:DataTable = new DataTable("Group");
table2.columns.add(new DataColumn("id", StorageType.IntType));
table2.columns.add(new DataColumn("name", StorageType.StringType));
var row3:DataRow = table2.addNewRow();
row3.setValue("id", 1);
row3.setValue("name", "G1");
var row4:DataRow = table2.addNewRow();
row4.setValue("id", 2);
row4.setValue("name", "G2");
var report:StiReport = new StiReport();
report.loadReportFromString(reportString);
report.regDataTable("Customer", "Customer", table1);
report.regDataTable("Group", "Group", table2);
report.dictionary.synchronize();
report.show();
Report file:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<StiSerializer application="StiReport" type="Flex" version="1.02">
<Dictionary Ref="1" isKey="true" type="Dictionary">
<Databases isList="true" count="0"/>
<DataSources isList="true" count="2">
<Customer Ref="2" isKey="true" type="DataTableSource">
<Alias>Customer</Alias>
<Columns isList="true" count="3">
<value>name,System.String</value>
<value>groupid,System.Int32</value>
<value>id,System.Int32</value>
</Columns>
<Dictionary isRef="1"/>
<Name>Customer</Name>
<NameInSource>DataSetName.Customer</NameInSource>
</Customer>
<Group Ref="3" isKey="true" type="DataTableSource">
<Alias>Group</Alias>
<Columns isList="true" count="2">
<value>id,System.Int32</value>
<value>name,System.String</value>
</Columns>
<Dictionary isRef="1"/>
<Name>Group</Name>
<NameInSource>DataSetName</NameInSource>
</Group>
</DataSources>
<Relations isList="true" count="1">
<Group Ref="4" isKey="true" type="DataRelation">
<Alias>Group</Alias>
<ChildColumns isList="true" count="1">
<value>groupid</value>
</ChildColumns>
<ChildSource isRef="2"/>
<Dictionary isRef="1"/>
<Name>Group</Name>
<NameInSource>GroupCustomer</NameInSource>
<ParentColumns isList="true" count="1">
<value>id</value>
</ParentColumns>
<ParentSource isRef="3"/>
</Group>
</Relations>
<Report isRef="0"/>
<Variables isList="true" count="0"/>
</Dictionary>
<EngineVersion>EngineV2</EngineVersion>
<GlobalizationStrings isList="true" count="0"/>
<MetaTags isList="true" count="0"/>
<Pages isList="true" count="1">
<Page1 Ref="5" isKey="true" type="Page">
<Border>None;Black;2;Solid;False;4;Black</Border>
<Brush>Transparent</Brush>
<Components isList="true" count="3">
<PageHeaderBand1 Ref="6" isKey="true" type="PageHeaderBand">
<Brush>Transparent</Brush>
<ClientRectangle>0,0.4,19,0.8</ClientRectangle>
<Components isList="true" count="1">
<Text4 Ref="7" isKey="true" type="Text">
<Brush>Transparent</Brush>
<ClientRectangle>0.6,0.2,1.6,0.6</ClientRectangle>
<Conditions isList="true" count="0"/>
<Font>Arial,10</Font>
<Margins>0,0,0,0</Margins>
<Name>Text4</Name>
<Page isRef="5"/>
<Parent isRef="6"/>
<Text>Text4</Text>
<TextBrush>Black</TextBrush>
</Text4>
</Components>
<Conditions isList="true" count="0"/>
<Name>PageHeaderBand1</Name>
<Page isRef="5"/>
<Parent isRef="5"/>
</PageHeaderBand1>
<DataBand2 Ref="8" isKey="true" type="DataBand">
<Brush>Transparent</Brush>
<ClientRectangle>0,2,19,0.8</ClientRectangle>
<Components isList="true" count="2">
<Text1 Ref="9" isKey="true" type="Text">
<Brush>Transparent</Brush>
<ClientRectangle>3.4,0.2,1.6,0.6</ClientRectangle>
<Conditions isList="true" count="0"/>
<Font>Arial,10</Font>
<Margins>0,0,0,0</Margins>
<Name>Text1</Name>
<Page isRef="5"/>
<Parent isRef="8"/>
<Text>{Group.name}</Text>
<TextBrush>Black</TextBrush>
</Text1>
<Text2 Ref="10" isKey="true" type="Text">
<Brush>Transparent</Brush>
<ClientRectangle>0.6,0.2,2.8,0.6</ClientRectangle>
<Conditions isList="true" count="0"/>
<Font>Arial,10</Font>
<Margins>0,0,0,0</Margins>
<Name>Text2</Name>
<Page isRef="5"/>
<Parent isRef="8"/>
<Text>Grupo:</Text>
<TextBrush>Black</TextBrush>
<Type>Expression</Type>
</Text2>
</Components>
<Conditions isList="true" count="0"/>
<DataSourceName>Group</DataSourceName>
<Filters isList="true" count="0"/>
<KeepDetailsTogether>True</KeepDetailsTogether>
<Name>DataBand2</Name>
<Page isRef="5"/>
<Parent isRef="5"/>
<Sort isList="true" count="0"/>
</DataBand2>
<DataBand1 Ref="11" isKey="true" type="DataBand">
<Brush>Transparent</Brush>
<ClientRectangle>0,3.6,19,0.8</ClientRectangle>
<Components isList="true" count="4">
<Text3 Ref="12" isKey="true" type="Text">
<Brush>Transparent</Brush>
<ClientRectangle>3.8,0.2,1.6,0.6</ClientRectangle>
<Conditions isList="true" count="0"/>
<Font>Arial,10</Font>
<Margins>0,0,0,0</Margins>
<Name>Text3</Name>
<Page isRef="5"/>
<Parent isRef="11"/>
<Text>{Customer.name}</Text>
<TextBrush>Black</TextBrush>
</Text3>
<Text5 Ref="13" isKey="true" type="Text">
<Brush>Transparent</Brush>
<ClientRectangle>1,0.2,2.8,0.6</ClientRectangle>
<Conditions isList="true" count="0"/>
<Font>Arial,10</Font>
<Margins>0,0,0,0</Margins>
<Name>Text5</Name>
<Page isRef="5"/>
<Parent isRef="11"/>
<Text>name</Text>
<TextBrush>Black</TextBrush>
</Text5>
<Text6 Ref="14" isKey="true" type="Text">
<Brush>Transparent</Brush>
<ClientRectangle>10.2,0.2,1.6,0.6</ClientRectangle>
<Conditions isList="true" count="0"/>
<Font>Arial,10</Font>
<Margins>0,0,0,0</Margins>
<Name>Text6</Name>
<Page isRef="5"/>
<Parent isRef="11"/>
<Text>{Customer.groupid}</Text>
<TextBrush>Black</TextBrush>
</Text6>
<Text7 Ref="15" isKey="true" type="Text">
<Brush>Transparent</Brush>
<ClientRectangle>7.4,0.2,2.8,0.6</ClientRectangle>
<Conditions isList="true" count="0"/>
<Font>Arial,10</Font>
<Margins>0,0,0,0</Margins>
<Name>Text7</Name>
<Page isRef="5"/>
<Parent isRef="11"/>
<Text>groupid</Text>
<TextBrush>Black</TextBrush>
</Text7>
</Components>
<Conditions isList="true" count="0"/>
<DataRelationName>GroupCustomer</DataRelationName>
<DataSourceName>Customer</DataSourceName>
<Filters isList="true" count="0"/>
<MasterComponent isRef="8"/>
<Name>DataBand1</Name>
<Page isRef="5"/>
<Parent isRef="5"/>
<Sort isList="true" count="0"/>
</DataBand1>
</Components>
<Conditions isList="true" count="0"/>
<Guid>f8cbf876f172f7d3347340273df10315</Guid>
<Margins>1,1,1,1</Margins>
<Name>Page1</Name>
<PageHeight>29.7</PageHeight>
<PageWidth>21</PageWidth>
<Report isRef="0"/>
<Watermark Ref="16" isKey="true" type="Stimulsoft.Report.Components.StiWatermark">
<Font>Arial,100</Font>
<TextBrush>[50:0:0:0]</TextBrush>
</Watermark>
</Page1>
</Pages>
<PrinterSettings Ref="17" isKey="true" type="Stimulsoft.Report.Print.StiPrinterSettings"/>
<ReportAlias>Report</ReportAlias>
<ReportChanged>03/10/2013 02:04:29 PM</ReportChanged>
<ReportCreated>03/06/2013 02:42:26 PM</ReportCreated>
<ReportFile>/Users/hugo/Desktop/Report.mrt</ReportFile>
<ReportGuid>3a1cf8b40a9763e309ba549df18e598a</ReportGuid>
<ReportName>Report</ReportName>
<ReportUnit>Centimeters</ReportUnit>
<ReportVersion>2013.1.1511</ReportVersion>
<ScriptLanguage>CSharp</ScriptLanguage>
<Styles isList="true" count="0"/>
</StiSerializer>
Sample code to reproduce the problem:
var table1:DataTable = new DataTable("Customer");
table1.columns.add(new DataColumn("id", StorageType.IntType));
table1.columns.add(new DataColumn("groupid", StorageType.IntType));
table1.columns.add(new DataColumn("name", StorageType.StringType));
var row1:DataRow = table1.addNewRow();
row1.setValue("id", 1);
row1.setValue("groupid", 1);
row1.setValue("name", "Hugo");
var row2:DataRow = table1.addNewRow();
row2.setValue("id", 2);
row2.setValue("groupid", 2);
row2.setValue("name", "Afonso");
var table2:DataTable = new DataTable("Group");
table2.columns.add(new DataColumn("id", StorageType.IntType));
table2.columns.add(new DataColumn("name", StorageType.StringType));
var row3:DataRow = table2.addNewRow();
row3.setValue("id", 1);
row3.setValue("name", "G1");
var row4:DataRow = table2.addNewRow();
row4.setValue("id", 2);
row4.setValue("name", "G2");
var report:StiReport = new StiReport();
report.loadReportFromString(reportString);
report.regDataTable("Customer", "Customer", table1);
report.regDataTable("Group", "Group", table2);
report.dictionary.synchronize();
report.show();
Report file:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<StiSerializer application="StiReport" type="Flex" version="1.02">
<Dictionary Ref="1" isKey="true" type="Dictionary">
<Databases isList="true" count="0"/>
<DataSources isList="true" count="2">
<Customer Ref="2" isKey="true" type="DataTableSource">
<Alias>Customer</Alias>
<Columns isList="true" count="3">
<value>name,System.String</value>
<value>groupid,System.Int32</value>
<value>id,System.Int32</value>
</Columns>
<Dictionary isRef="1"/>
<Name>Customer</Name>
<NameInSource>DataSetName.Customer</NameInSource>
</Customer>
<Group Ref="3" isKey="true" type="DataTableSource">
<Alias>Group</Alias>
<Columns isList="true" count="2">
<value>id,System.Int32</value>
<value>name,System.String</value>
</Columns>
<Dictionary isRef="1"/>
<Name>Group</Name>
<NameInSource>DataSetName</NameInSource>
</Group>
</DataSources>
<Relations isList="true" count="1">
<Group Ref="4" isKey="true" type="DataRelation">
<Alias>Group</Alias>
<ChildColumns isList="true" count="1">
<value>groupid</value>
</ChildColumns>
<ChildSource isRef="2"/>
<Dictionary isRef="1"/>
<Name>Group</Name>
<NameInSource>GroupCustomer</NameInSource>
<ParentColumns isList="true" count="1">
<value>id</value>
</ParentColumns>
<ParentSource isRef="3"/>
</Group>
</Relations>
<Report isRef="0"/>
<Variables isList="true" count="0"/>
</Dictionary>
<EngineVersion>EngineV2</EngineVersion>
<GlobalizationStrings isList="true" count="0"/>
<MetaTags isList="true" count="0"/>
<Pages isList="true" count="1">
<Page1 Ref="5" isKey="true" type="Page">
<Border>None;Black;2;Solid;False;4;Black</Border>
<Brush>Transparent</Brush>
<Components isList="true" count="3">
<PageHeaderBand1 Ref="6" isKey="true" type="PageHeaderBand">
<Brush>Transparent</Brush>
<ClientRectangle>0,0.4,19,0.8</ClientRectangle>
<Components isList="true" count="1">
<Text4 Ref="7" isKey="true" type="Text">
<Brush>Transparent</Brush>
<ClientRectangle>0.6,0.2,1.6,0.6</ClientRectangle>
<Conditions isList="true" count="0"/>
<Font>Arial,10</Font>
<Margins>0,0,0,0</Margins>
<Name>Text4</Name>
<Page isRef="5"/>
<Parent isRef="6"/>
<Text>Text4</Text>
<TextBrush>Black</TextBrush>
</Text4>
</Components>
<Conditions isList="true" count="0"/>
<Name>PageHeaderBand1</Name>
<Page isRef="5"/>
<Parent isRef="5"/>
</PageHeaderBand1>
<DataBand2 Ref="8" isKey="true" type="DataBand">
<Brush>Transparent</Brush>
<ClientRectangle>0,2,19,0.8</ClientRectangle>
<Components isList="true" count="2">
<Text1 Ref="9" isKey="true" type="Text">
<Brush>Transparent</Brush>
<ClientRectangle>3.4,0.2,1.6,0.6</ClientRectangle>
<Conditions isList="true" count="0"/>
<Font>Arial,10</Font>
<Margins>0,0,0,0</Margins>
<Name>Text1</Name>
<Page isRef="5"/>
<Parent isRef="8"/>
<Text>{Group.name}</Text>
<TextBrush>Black</TextBrush>
</Text1>
<Text2 Ref="10" isKey="true" type="Text">
<Brush>Transparent</Brush>
<ClientRectangle>0.6,0.2,2.8,0.6</ClientRectangle>
<Conditions isList="true" count="0"/>
<Font>Arial,10</Font>
<Margins>0,0,0,0</Margins>
<Name>Text2</Name>
<Page isRef="5"/>
<Parent isRef="8"/>
<Text>Grupo:</Text>
<TextBrush>Black</TextBrush>
<Type>Expression</Type>
</Text2>
</Components>
<Conditions isList="true" count="0"/>
<DataSourceName>Group</DataSourceName>
<Filters isList="true" count="0"/>
<KeepDetailsTogether>True</KeepDetailsTogether>
<Name>DataBand2</Name>
<Page isRef="5"/>
<Parent isRef="5"/>
<Sort isList="true" count="0"/>
</DataBand2>
<DataBand1 Ref="11" isKey="true" type="DataBand">
<Brush>Transparent</Brush>
<ClientRectangle>0,3.6,19,0.8</ClientRectangle>
<Components isList="true" count="4">
<Text3 Ref="12" isKey="true" type="Text">
<Brush>Transparent</Brush>
<ClientRectangle>3.8,0.2,1.6,0.6</ClientRectangle>
<Conditions isList="true" count="0"/>
<Font>Arial,10</Font>
<Margins>0,0,0,0</Margins>
<Name>Text3</Name>
<Page isRef="5"/>
<Parent isRef="11"/>
<Text>{Customer.name}</Text>
<TextBrush>Black</TextBrush>
</Text3>
<Text5 Ref="13" isKey="true" type="Text">
<Brush>Transparent</Brush>
<ClientRectangle>1,0.2,2.8,0.6</ClientRectangle>
<Conditions isList="true" count="0"/>
<Font>Arial,10</Font>
<Margins>0,0,0,0</Margins>
<Name>Text5</Name>
<Page isRef="5"/>
<Parent isRef="11"/>
<Text>name</Text>
<TextBrush>Black</TextBrush>
</Text5>
<Text6 Ref="14" isKey="true" type="Text">
<Brush>Transparent</Brush>
<ClientRectangle>10.2,0.2,1.6,0.6</ClientRectangle>
<Conditions isList="true" count="0"/>
<Font>Arial,10</Font>
<Margins>0,0,0,0</Margins>
<Name>Text6</Name>
<Page isRef="5"/>
<Parent isRef="11"/>
<Text>{Customer.groupid}</Text>
<TextBrush>Black</TextBrush>
</Text6>
<Text7 Ref="15" isKey="true" type="Text">
<Brush>Transparent</Brush>
<ClientRectangle>7.4,0.2,2.8,0.6</ClientRectangle>
<Conditions isList="true" count="0"/>
<Font>Arial,10</Font>
<Margins>0,0,0,0</Margins>
<Name>Text7</Name>
<Page isRef="5"/>
<Parent isRef="11"/>
<Text>groupid</Text>
<TextBrush>Black</TextBrush>
</Text7>
</Components>
<Conditions isList="true" count="0"/>
<DataRelationName>GroupCustomer</DataRelationName>
<DataSourceName>Customer</DataSourceName>
<Filters isList="true" count="0"/>
<MasterComponent isRef="8"/>
<Name>DataBand1</Name>
<Page isRef="5"/>
<Parent isRef="5"/>
<Sort isList="true" count="0"/>
</DataBand1>
</Components>
<Conditions isList="true" count="0"/>
<Guid>f8cbf876f172f7d3347340273df10315</Guid>
<Margins>1,1,1,1</Margins>
<Name>Page1</Name>
<PageHeight>29.7</PageHeight>
<PageWidth>21</PageWidth>
<Report isRef="0"/>
<Watermark Ref="16" isKey="true" type="Stimulsoft.Report.Components.StiWatermark">
<Font>Arial,100</Font>
<TextBrush>[50:0:0:0]</TextBrush>
</Watermark>
</Page1>
</Pages>
<PrinterSettings Ref="17" isKey="true" type="Stimulsoft.Report.Print.StiPrinterSettings"/>
<ReportAlias>Report</ReportAlias>
<ReportChanged>03/10/2013 02:04:29 PM</ReportChanged>
<ReportCreated>03/06/2013 02:42:26 PM</ReportCreated>
<ReportFile>/Users/hugo/Desktop/Report.mrt</ReportFile>
<ReportGuid>3a1cf8b40a9763e309ba549df18e598a</ReportGuid>
<ReportName>Report</ReportName>
<ReportUnit>Centimeters</ReportUnit>
<ReportVersion>2013.1.1511</ReportVersion>
<ScriptLanguage>CSharp</ScriptLanguage>
<Styles isList="true" count="0"/>
</StiSerializer>