程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了SyncFusion BoldReports ReportViewer 数据源具有以下两个或两个:DataSourceReference 和 ConnectionProperties大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决SyncFusion BoldReports ReportViewer 数据源具有以下两个或两个:DatasourceReference 和 ConnectionProperties?

开发过程中遇到SyncFusion BoldReports ReportViewer 数据源具有以下两个或两个:DatasourceReference 和 ConnectionProperties的问题如何解决?下面主要结合日常开发的经验,给出你关于SyncFusion BoldReports ReportViewer 数据源具有以下两个或两个:DatasourceReference 和 ConnectionProperties的解决方法建议,希望对你解决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,请注明来意。
标签: