public static void VerifyReportParameters(Report report, Rdl rdl) { for (int i = 0; i < rdl.Items.Length; i++) { if (rdl.ItemsElementName[i].Equals(RdlChildElement.ReportParameters)) { RdlReportParameters reportParameters = (RdlReportParameters)rdl.Items[i]; foreach (RdlReportParameter reportParameter in reportParameters.ReportParameter) { IReportParameter target = report.ReportParameter(reportParameter.Name); if (target == null) { throw new ReportParameterException("XML metadata is missing parameter: " + reportParameter.Name); } for (int j = 0; j < reportParameter.Items.Length; j++) { switch (reportParameter.ItemsElementName[j]) { case RdlReportParameterChildElement.DataType: ReportParameterDataType rpdt = (ReportParameterDataType)Enum.Parse(typeof(ReportParameterDataType), reportParameter.Items[j].ToString()); DbType dbType = XmlReportFactory.ToDbType(rpdt); if (!target.DbType.Equals(dbType)) { throw new ReportParameterException("XML metadata mismatch (DataType)! Parameter: " + target.Name); } break; } } } } } }
private void Load() { XmlSerializer serializer = new XmlSerializer(typeof(Rdl)); using (Stream s = GetReportStream()) { report = (Rdl)serializer.Deserialize(s); } }
public static void PopulateReportDataSources(Report report, Rdl rdl) { IList <IReportDataCommandTemplate> datasources = new List <IReportDataCommandTemplate>(); for (int i = 0; i < rdl.Items.Length; i++) { if (rdl.ItemsElementName[i].Equals(RdlChildElement.DataSets)) { DataSets dataSets = (DataSets)rdl.Items[i]; foreach (DataSet dataSet in dataSets.DataSet) { ReportDataCommandTemplate reportDataCommandTemplate = new ReportDataCommandTemplate(dataSet.Name); ReportDataMap reportDataMap = new ReportDataMap(); foreach (object dataSetItem in dataSet.Items) { DataSetQuery queryType = dataSetItem as DataSetQuery; RdlFields fieldCollection = dataSetItem as RdlFields; if (queryType != null) { for (int j = 0; j < queryType.Items.Length; j++) { switch (queryType.ItemsElementName[j]) { case DataSetQueryChildElement.CommandType: reportDataCommandTemplate.CommandType = (CommandType)Enum.Parse(typeof(CommandType), queryType.Items[j].ToString()); break; case DataSetQueryChildElement.CommandText: reportDataCommandTemplate.CommandText = queryType.Items[j].ToString(); break; case DataSetQueryChildElement.QueryParameters: DataSetQueryParameters queryParameters = (DataSetQueryParameters)queryType.Items[j]; foreach (DataSetQueryParameter queryParameter in queryParameters.QueryParameter) { string xname = queryParameter.Name; if (xname.StartsWith("@", StringComparison.OrdinalIgnoreCase)) { xname = queryParameter.Name.Substring(1); } IDataParameterTemplate parameter = report.ReportParameter(xname); if (parameter == null) { throw new ReportParameterException( "Report does not define parameter: " + xname); } reportDataCommandTemplate.Parameters.Add(parameter); } break; case DataSetQueryChildElement.DataSourceName: reportDataCommandTemplate.DataSourceName = queryType.Items[j].ToString(); break; } } } else if (fieldCollection != null) { RdlField[] fields = fieldCollection.Field; for (int c = 0; c < fields.Length; c++) { DataMapEntry newEntry = new DataMapEntry(); newEntry.FieldName = fields[c].Name; for (int d = 0; d < fields[c].ItemsElementName.Length; d++) { switch (fields[c].ItemsElementName[d]) { case RdlFieldType.Item: if (fields[c].Items[d] is System.Xml.XmlElement) { newEntry.TypeName = ((System.Xml.XmlElement)fields[c].Items[d]).InnerText; } break; case RdlFieldType.DataField: newEntry.ColumnName = fields[c].Items[d].ToString(); break; } } reportDataMap.AddDataMapEntry(newEntry); } } } reportDataCommandTemplate.DataMap = reportDataMap; datasources.Add(reportDataCommandTemplate); } } } report.ReportDataCommandTemplates = datasources; }