2013-01-23 4 views
1

매개 변수 @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

는, 당신은'ObjectDataSource'은 '아무튼 방법'GetData', 찾고 있습니다 존재하지 않습니다. 'ObjectDataSource'가 실제로 어떻게 작동하는지 살펴보아야합니다. – rikitikitik

+0

왜'com.Parameters.AddRange (Parameter);를 사용하고 있습니까?'com.Parameters.AddWithValue()'메소드를 사용하지 않는 이유는 무엇입니까? VB에서는 AddRange가 작동하지만 VB.NET에서 C#으로 변환 작업을하기 전에이 문제가 있었고 AddRange가 필요하지 않습니다. – MethodMan

+0

감사합니다 ... 그런데 GetData는 여기에 하나의 매개 변수가 있기 때문에 인식되지 않습니다 (@ Material - 저장 프로 시저에서) 어떤 이유로 매개 변수없이 호출됩니다. – 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" /> 

이 유를 통해 UR 방식의 반환 값을 변경하려고 할 수 있습니다 데이터 집합 .. 및 코드 숨김에서 그 방법에 데이터 바인딩하려고 ..

어쩌면

가 작동하지 않을 수 있습니다 ..

오류가 언급 한 바와 같이
+0

단지 getdata에서 createreport로 바인딩을 변경 중입니다. 오류가 getdata를 가리키고 있기 때문에 많은 도움이되지는 않지만 여전히 가치가 있습니다. 따라서 getdata를 가리키고 있으므로 추측을하고 있습니다. 어쩌면 진짜 해결책이 될지도 모릅니다. 여기서는 실제로 조금 복잡합니다. 가장 기본적인 것을 해결하고 모든 복잡한 것들이 제자리에 있는지 알아보기 위해 해결할 시간이 더 필요합니다. – user1974729

관련 문제