2013-01-23 52 views
1

我有一个名为“Graph”的存储过程,它应该为参数@Material获取一个值,并且我在ASP.NET中创建了一个报告,该报告应该使用存储的数据程序。带有参数的ASP.NET报告

但是,当我尝试加载的报告,我得到:报表处理期间发生

错误。 无法创建到数据源'PhilipsMaterialsDataSet'的连接。 ObjectDataSource'ObjectDataSource1'无法找到没有参数的非泛型方法'GetData'。

我尝试了不同的解决方案,但都没有工作。另外,我不确定是否应该在ASP代码中声明参数。

(顺便说一下,的GetData这里不认可,因为它有一个参数(@材质 - 从存储过程),由于某种原因,它被称为不带任何参数)

背后的代码:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Configuration; 
using System.Data; 
using System.Data.SqlClient; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using Microsoft.Reporting.WebForms; 


public partial class StatisticsPage : System.Web.UI.Page 
{ 
    string Connectionstring = "server=(local)\\SQLEXPRESS;database=PhilipsMaterials;Integrated Security=SSPI"; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 

     } 

    } 

    protected void btndisplay_Click(object sender, EventArgs e) 
    { 
     BindReport(); 
    } 
    private void BindReport() 
    { 
     SSRSReport report = new SSRSReport(); 
     SqlParameter[] sqlParams = new SqlParameter[] { 
     new SqlParameter("@Material","453567068441") 

     }; 
     string ReportDataSource = "DataSet1"; 
     bool bind = report.CreateReport(Connectionstring, "graph", sqlParams, ref ReportViewer1, ReportDataSource); 
     if (bind) 
     { 
      ReportViewer1.Visible = true; 
     } 
    } 
} 


public class SSRSReport 
{ 


     public SSRSReport() 
     { 
       // 
       // TODO: Add constructor logic here 
       // 
     } 
    public bool CreateReport(String Connectionstring,string StoreProcedureName ,SqlParameter[] Parameter,ref Microsoft.Reporting.WebForms.ReportViewer ReportViewer,string ReportDataSource) 
    { 
     bool reportbind = false; 
     using (SqlConnection con = new SqlConnection(Connectionstring)) 
     { 

      SqlCommand com = new SqlCommand(); 
      com.Connection = con; 
      com.CommandType = CommandType.StoredProcedure; 
      com.CommandText = StoreProcedureName; 
      com.Parameters.AddRange(Parameter); 
      DataSet ds = new DataSet(); 
      SqlDataAdapter da = new SqlDataAdapter(com); 
      da.Fill(ds); 
      ReportDataSource datasource = new ReportDataSource(ReportDataSource, ds.Tables[0]); 
      if (ds.Tables[0].Rows.Count > 0) 
      { 
       ReportViewer.LocalReport.DataSources.Clear(); 
       ReportViewer.LocalReport.DataSources.Add(datasource); 





       //This is another solution I tried: 





       //List<ReportParameter> lstReportParameters = new List<ReportParameter>(); 
       //ReportParameter objReportParameter = new ReportParameter("Material", "453567068441"); 
       //lstReportParameters.Add(objReportParameter); 
       //ReportViewer.LocalReport.SetParameters(lstReportParameters); 
       // ReportViewer.ServerReport.Refresh(); 

       reportbind = true; 
      }      
     } 
     return reportbind; 
    } 

} 

ASP代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="StatisticsPage.aspx.cs" Inherits="StatisticsPage" %> 

<%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %> 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
    <title>Test SSRS</title> 
</head> 
<body> 
     <form id="form1" runat="server"> 
    <div> 

    </div> 
     <rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana" Font-Size="8pt" WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt" Height="610px" Width="1179px" ShowParameterPrompts="true"> 
      <LocalReport ReportPath="Report.rdlc" > 
       <DataSources> 
        <rsweb:ReportDataSource DataSourceId="ObjectDataSource1" Name="DataSet1" /> 
       </DataSources> 
      </LocalReport> 
     </rsweb:ReportViewer> 
     <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetData" TypeName="PhilipsMaterialsDataSetTableAdapters.GraphTableAdapter" > 
     </asp:ObjectDataSource> 
      <asp:ScriptManager ID="ScriptManager1" runat="server"> 
      </asp:ScriptManager> 
    </form> 
</body> 
</html> 
+0

而不是发布您的页面类代码,您可以发布GetData方法吗? –

+0

[带参数的ASP.NET报告]的可能重复(http://stackoverflow.com/questions/14470646/asp-net-report-with-parameter) –

回答

0

错误是说的GetData需要一些参数,你必须通过添加参数,如像供应他们:

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetData" TypeName="PhilipsMaterialsDataSetTableAdapters.GraphTableAdapter" > 
    <SelectParameters> 
     <asp:Parameter Name="X" DefaultValue="Y" .. /> 
    </SelectParameters> 
</asp:ObjectDataSource> 
+0

非常感谢,现在报告可以加载,但我得到: “没有数据可用”我添加了: Onca

+0

OK。你必须通过添加一个DefaultValue来提供一个值。您可以在代码中将默认值设置为您需要的值。默认值是提供给该函数的值。或者查看ControlParameter,SessionParameter等其他参数,它们的功能比默认值更多。 –