大佬教程收集整理的这篇文章主要介绍了SyncFusion BoldReports ReportViewer 数据源具有以下两个或两个:DataSourceReference 和 ConnectionProperties,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用 SyncFusion BoldReports ReportVIEwer 并收到以下错误:
数据源具有以下两个或两个:DatasourceReference 和 ConnectionPropertIEs。数据源必须恰好具有这些元素之一。
我们有一个基于 Angular 6 的站点,带有远程 WebAPI。我们要做的是在报表数据到达 ReportAPIController 时加载它
printexposure.component.@R_301_6832@:这部分看起来很可靠,因为它正在调用报告并尝试处理它。
<bold-reportvIEwer ID="vIEwer" [reportserviceUrl] = "serviceUrl" [reportPath]="Printexpo.rdlc" [processingMode] = "Local" (AJAXBeforeLoad) = "onAJAXrequest($event)" style="wIDth: 100%;height: 600px"> </bold-reportvIEwer>
@H_772_13@在控制器端:
public class ReportAPIController : APIController,IReportController,IReportLogger { Dictionary<String,object> JsonArray = null; String parameterjsonData = null; //Post action for processing the rdl/rdlc report public object PostReportAction([FromBody]Dictionary<String,object> JsonResult) { JsonArray = JsonResult; if (JsonArray.ContainsKey("customData")) { //Get clIEnt sIDe JsON custom data,desirialize it parameterjsonData = JsonArraY["customData"].ToString(); } return ReportHelper.ProcessReport(JsonResult,this); } //Get action for getTing resources from the report [System.Web.http.Actionname("Getresource")] [System.Web.Mvc.AcceptVerbs("GET")] public object Getresource(String key,String resourcetype,bool isPrint) { return ReportHelper.Getresource(key,resourcetype,isPrint); } //Method will be called when initialize the report options before start processing the report public voID OnInitReportoptions(ReportVIEwerOptions reportoption) { reportoption.ReportModel.ReportPath = httpContext.Current.Server.MapPath("~/ReportAssets/" + reportoption.ReportModel.ReportPath); var paramList = JObject.Parse(parameterjsonData); int userID = Int32.Parse(paramList["userID"].ToString()); int centrEID = Int32.Parse(paramList["centerID"].ToString()); reportoption.ReportModel.Datasources.AddRange(Helpers.ReportDataHelper.getReportDatasources(userID,centrEID,parameterjsonData)); } //Method will be called when reported is loaded public voID OnReportLoaded(ReportVIEwerOptions reportoption) { var reportParameters = ReportHelper.GetParameters(JsonArray,this); var paramList = JObject.Parse(parameterjsonData); List<BoldReports.Web.ReportParameter> setParameters = new List<BoldReports.Web.ReportParameter>(); if (reportParameters != null) { foreach (var rptParameter in reportParameters) { var paramValue = paramList[rptParameter.name].ToString(); setParameters.Add(new BoldReports.Web.ReportParameter() { name = rptParameter.name,Values = new List<String>() { paramValue } }); } reportoption.ReportModel.Parameters = setParameters; } } public voID LogError(String message,Exception exception,MethodBase methodType,ErrorType errorTypE) { WriteLogs(String.Format("Error message: {0} \n Stack Trace: {1}",message,exception.StackTracE)); } public voID LogError(String errorCode,String message,String errorDetail,String methodname,String className) { WriteLogs(String.Format("Class name: {0} \n Method name: {1} \n Error message: {2} \n Stack Trace: {3}",classname,methodname,errorDetail,(exception == null ? "no exception" : exception.StackTracE))); } internal voID WriteLogs(String errormessagE) { // Error details text file path LOCATIOn String filePath = httpContext.Current.Server.MapPath("/App_Data/Errordetails.txt"); using (StreamWriter writer = new StreamWriter(filePath,truE)) { writer.autoFlush = true; writer.Writeline(errormessagE); } } }
@H_772_13@这是它抛出错误的地方。
我在 API 端检索数据的辅助类:
public static class ReportDataHelper { public static List<BoldReports.Web.ReportDatasource> getReportDatasources(int userID,int centrEID,String parameterjsonData) { var paramList = JObject.Parse(parameterjsonData); String Reportname = paramList["Reportname"].ToString(); switch (Reportname.Tolower()) { case "expo": return getExpoPrintDatasources(userID,parameterjsonData); break; case "": break; } return null; } private class CaseReportParameters { public String Reportname { get; set; } public int CasEID { get; set; } public bool allowPrintPHI { get; set; } public bool allowPrintRevIEws { get; set; } public int userID { get; set; } public int centerID { get; set; } } private static List<BoldReports.Web.ReportDatasource> getExpoPrintDatasources(int userID,String parameterjsonData) { //Get clIEnt sIDe JsON custom data,desirialize it and store in local variable. var expoParams = JsonConvert.DeserializeObject<CaseReportParameters>(parameterjsonData); bool EditMode = false; var exposureDetails = new ExposureBL().GetExposureDetails(expoParams.CasEID,userID,EditMode,expoParams.allowPrintPHI); // flatten out lab tests and responses var LabTestList = new List<LabTest>(); foreach (var lab in exposureDetails.LabList) { if (lab.LabTestList.Count > 0) { LabTestList.AddRange(new List<LabTest>(lab.LabTestList)); } } var ResponseList = new List<Response>(); foreach (var revIEw in exposureDetails.RevIEwList) { if (revIEw.ResponseList.Count > 0) { ResponseList.AddRange(new List<Response>(revIEw.ResponseList)); } } var r = new List<BoldReports.Web.ReportDatasource>(); var ExpoDataSet = exposureDetails; r.Add(new BoldReports.Web.ReportDatasource("Callinfo",exposureDetails.Callinfo)); return r; } }
@H_772_13@这是我的 printexpo.rdlc 中的 xml,当我创建它时,它位于 Project.services.DTO.DTO 中,因此我可以获得数据类“Callinfo”的架构,然后我将其转移到 Project.services .WebAPI。我认为这应该不是问题,因为其中的报告文件和数据集只是一个架构,我正在通过上面的 API 加载数据。
<?xml version="1.0" enCoding="utf-8"?> <Report xmlns="http://scheR_890_11845@as.microsoft.com/sqlserver/reporTing/2008/01/reportdeFinition" xmlns:rd="http://scheR_890_11845@as.microsoft.com/sqlServer/reporTing/reportdesigner"> <Body> <ReportItems> <TextBox name="TextBox1"> <Cangrow>true</Cangrow> <KeepTogether>true</KeepTogether> <Paragraphs> <Paragraph> <TextRuns> <TextRun> <Value>Exposure Report by HF</Value> <Style /> </TextRun> </TextRuns> <Style /> </Paragraph> </Paragraphs> <rd:Defaultname>TextBox1</rd:Defaultname> <top>0.45917in</top> <left>0.61333in</left> <Height>0.3in</Height> <WIDth>2.93333in</WIDth> <Style> <border> <Style>None</Style> </border> <paddingleft>2pt</paddingleft> <paddingRight>2pt</paddingRight> <paddingtop>2pt</paddingtop> <paddingBottom>2pt</paddingBottom> </Style> </TextBox> </ReportItems> <Height>2in</Height> <Style /> </Body> <WIDth>6.5in</WIDth> <Page> <leftmargin>1in</leftmargin> <Rightmargin>1in</Rightmargin> <topmargin>1in</topmargin> <Bottommargin>1in</Bottommargin> <Style /> </Page> <autorefresh>0</autorefresh> <Datasources> <Datasource name="ProjectservicesDTODTO"> <ConnectionPropertIEs> <DataProvIDer>System.Data.DataSet</DataProvIDer> <ConnectString>/* Local Connection */</ConnectString> </ConnectionPropertIEs> <rd:DatasourcEID>f4886133-224b-4299-ac3a-3e75b921c3f4</rd:DatasourcEID> </Datasource> </Datasources> <DataSets> <DataSet name="Callinfo"> <query> <Datasourcename>ProjectservicesDTODTO</Datasourcename> <CommandText>/* Local query */</CommandText> </query> <FIElds> <FIEld name="CalldatetiR_890_11845@e"> <datafield>CalldatetiR_890_11845@e</datafield> <rd:Typename>System.Nullable`1[[System.datetiR_890_11845@eOffset,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]]</rd:Typename> </FIEld> <FIEld name="CallemployeEID"> <datafield>CallemployeEID</datafield> <rd:Typename>System.Nullable`1[[system.int32,PublicKeyToken=b77a5c561934e089]]</rd:Typename> </FIEld> <FIEld name="Callemployeename"> <datafield>Callemployeename</datafield> <rd:Typename>System.String</rd:Typename> </FIEld> <FIEld name="CallerCityname"> <datafield>CallerCityname</datafield> <rd:Typename>System.String</rd:Typename> </FIEld> <FIEld name="CallerCountryID"> <datafield>CallerCountryID</datafield> <rd:Typename>System.Nullable`1[[system.int32,PublicKeyToken=b77a5c561934e089]]</rd:Typename> </FIEld> <FIEld name="CallerCountryname"> <datafield>CallerCountryname</datafield> <rd:Typename>System.String</rd:Typename> </FIEld> <FIEld name="CallerEmail"> <datafield>CallerEmail</datafield> <rd:Typename>System.String</rd:Typename> </FIEld> <FIEld name="CallerFirstname"> <datafield>CallerFirstname</datafield> <rd:Typename>System.String</rd:Typename> </FIEld> <FIEld name="CallerLastname"> <datafield>CallerLastname</datafield> <rd:Typename>System.String</rd:Typename> </FIEld> <FIEld name="CallerPhoneNotes"> <datafield>CallerPhoneNotes</datafield> <rd:Typename>System.String</rd:Typename> </FIEld> <FIEld name="CallerPostCode"> <datafield>CallerPostCode</datafield> <rd:Typename>System.String</rd:Typename> </FIEld> <FIEld name="CallerPriMaryAddress"> <datafield>CallerPriMaryAddress</datafield> <rd:Typename>System.String</rd:Typename> </FIEld> <FIEld name="CallerPriMaryPhone"> <datafield>CallerPriMaryPhone</datafield> <rd:Typename>System.String</rd:Typename> </FIEld> <FIEld name="CallerSecondaryAddress"> <datafield>CallerSecondaryAddress</datafield> <rd:Typename>System.String</rd:Typename> </FIEld> <FIEld name="CallerSecondaryPhone"> <datafield>CallerSecondaryPhone</datafield> <rd:Typename>System.String</rd:Typename> </FIEld> <FIEld name="CallerSitEID"> <datafield>CallerSitEID</datafield> <rd:Typename>System.Nullable`1[[system.int32,PublicKeyToken=b77a5c561934e089]]</rd:Typename> </FIEld> <FIEld name="CallerSitename"> <datafield>CallerSitename</datafield> <rd:Typename>System.String</rd:Typename> </FIEld> <FIEld name="CallerStatEID"> <datafield>CallerStatEID</datafield> <rd:Typename>System.Nullable`1[[system.int32,PublicKeyToken=b77a5c561934e089]]</rd:Typename> </FIEld> <FIEld name="CallerStatename"> <datafield>CallerStatename</datafield> <rd:Typename>System.String</rd:Typename> </FIEld> <FIEld name="CallertitlEID"> <datafield>CallertitlEID</datafield> <rd:Typename>System.Nullable`1[[system.int32,PublicKeyToken=b77a5c561934e089]]</rd:Typename> </FIEld> <FIEld name="Callertitlename"> <datafield>Callertitlename</datafield> <rd:Typename>System.String</rd:Typename> </FIEld> <FIEld name="CallID"> <datafield>CallID</datafield> <rd:Typename>system.int32</rd:Typename> </FIEld> <FIEld name="CallLockUserID"> <datafield>CallLockUserID</datafield> <rd:Typename>System.Nullable`1[[system.int32,PublicKeyToken=b77a5c561934e089]]</rd:Typename> </FIEld> <FIEld name="CallLockUsername"> <datafield>CallLockUsername</datafield> <rd:Typename>System.String</rd:Typename> </FIEld> <FIEld name="Casenumber"> <datafield>Casenumber</datafield> <rd:Typename>System.String</rd:Typename> </FIEld> <FIEld name="CentrEID"> <datafield>CentrEID</datafield> <rd:Typename>System.Nullable`1[[system.int32,PublicKeyToken=b77a5c561934e089]]</rd:Typename> </FIEld> <FIEld name="CentreInitial"> <datafield>CentreInitial</datafield> <rd:Typename>System.String</rd:Typename> </FIEld> <FIEld name="Centrename"> <datafield>Centrename</datafield> <rd:Typename>System.String</rd:Typename> </FIEld> <FIEld name="IsCallLock"> <datafield>IsCallLock</datafield> <rd:Typename>System.Nullable`1[[System.Boolean,PublicKeyToken=b77a5c561934e089]]</rd:Typename> </FIEld> <FIEld name="TempCallID"> <datafield>TempCallID</datafield> <rd:Typename>System.Nullable`1[[system.int32,PublicKeyToken=b77a5c561934e089]]</rd:Typename> </FIEld> <FIEld name="UserID"> <datafield>UserID</datafield> <rd:Typename>system.int32</rd:Typename> </FIEld> </FIElds> <rd:DataSeTinfo> <rd:DataSetname>Project.services.DTO.DTO</rd:DataSetname> <rd:tablename>Callinfo</rd:tablename> <rd:ObjectDatasourceType>Project.services.DTO.DTO.Callinfo,Project.services.DTO,Version=0.9.209.0,PublicKeyToken=null</rd:ObjectDatasourceType> </rd:DataSeTinfo> </DataSet> </DataSets> <rd:reportUnitType>Inch</rd:reportUnitType> <rd:reportID>8977239d-4165-47c5-94b3-9a7a807bf8e3</rd:reportID> </Report>
@H_772_13@我只发现了一个与 SyncFusion 类似的问题:https://www.syncfusion.com/forums/162953/the-data-source-x-has-both-or-neither-of-the-following-datasourcereference-and,他们告诉小伙子在项目中包含 BoldReport 的扩展,我也这样做了,但无济于事。不知道它应该做什么,哈哈。
上面的报告是简化的,还有很多内容要处理,我很困惑,如果能提供任何帮助,我们将不胜感激。
我是报告设计的新手,是否可以删除/忽略数据源?当我自己在 ReportAPIController 中加载数据集时?
解决方法
您必须在客户端应用程序中将报表查看器处理模式设置为本地。对于处理模式属性值,您必须绑定在打字稿文件中。您能否在您的应用程序中使用以下代码片段。
app.component.html 文件
<bold-reportviewer id="viewer" [reportserviceUrl] = "serviceUrl" [reportPath]="reportPath" [processingMode] = "Local" (ajaxBeforeLoad) = "onAjaxrequest($event)" style="width: 100%;height: 600px"> </bold-reportviewer>
@H_772_13@app.component.ts 文件
export class AppComponent { public serviceUrl: String; public reportPath:string; public Local:string; constructor() { this.reportPath = 'Printexpo.rdlc' this.Local="Local" } }
@H_772_13@大佬总结
以上是大佬教程为你收集整理的SyncFusion BoldReports ReportViewer 数据源具有以下两个或两个:DataSourceReference 和 ConnectionProperties全部内容,希望文章能够帮你解决SyncFusion BoldReports ReportViewer 数据源具有以下两个或两个:DataSourceReference 和 ConnectionProperties所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。