2013-01-23 57 views
1

的ASP.NET报表我有一个名为“Graph”的存储过程,它应该获得参数@Material的值,并且我在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

至于提到的错误,你的'ObjectDataSource'正在寻找方法'GetData',这没有按”不存在。你应该看看ObjectDataSource是如何工作的。 – rikitikitik

+0

为什么使用'com.Parameters.AddRange(Parameter);'为什么不使用'com.Parameters.AddWithValue()'方法..?在vb的AddRange会工作,但我有这个问题之前做从VB.NET到C#的转换工作,并且你不需要AddRange – MethodMan

+0

谢谢...顺便说一句,GetData在这里不被识别,因为它有一个参数( @材料 - 来自存储过程),由于某种原因,它被调用时没有任何参数。 – Onca

回答

0
public DataSet CreateReport(String Connectionstring,string StoreProcedureName ,SqlParameter[] Parameter,ref Microsoft.Reporting.WebForms.ReportViewer ReportViewer,string ReportDataSource) { 

//return the dataset 

} 

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
    SelectMethod="CreateReport" TypeName="SqlHelper" /> 

ü可以尝试乌尔方法的返回值更改为数据集.. 并在代码隐藏试着数据绑定到该方法..

也许它可能工作..

+0

我只是改变绑定从getdata创建报告真的.. cud不是很多的帮助,但仍值得一试,因为错误指向getdata,所以只是猜测,它的..也许不是一个真正的解决方案,不能告诉在这里,这确实有点复杂,需要更多时间来解决,试图让最基本的东西摆脱困境,看看所有复杂的东西是否落实到位。 – user1974729