2013-01-23 89 views
0

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

但是,当我尝试加载的报告,我得到:

“数据不可用”

含义内,参数设置不正确(使用默认值,它的工作原理... )

代码隐藏:

public partial class StatisticsPage : Page 
{ 
    string Connectionstring = "server=(local)\\SQLEXPRESS;database=PhilipsMaterials;Integrated Security=SSPI"; 

    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 bool CreateReport(String Connectionstring, string StoreProcedureName , SqlParameter[] parameters, 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(parameters); 
      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); 
       ReportParameter myParam = new ReportParameter("Material", "453567068441"); 
       ReportViewer.LocalReport.SetParameters(myParam); 
       ReportViewer.ServerReport.Refresh(); 
       reportbind = true; 
      }      
     } 
     return reportbind; 
    } 
} 

的标记:

<%@ 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"> 
     <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" > 
      <SelectParameters> 
       <asp:Parameter Name="Material"/> 
      </SelectParameters> 
      </asp:ObjectDataSource> 
      <asp:ScriptManager ID="ScriptManager1" runat="server"> 
      </asp:ScriptManager> 
    </form> 
</body> 
</html> 
+0

我不是专家,但你为什么要同时使用'LocalReport'和'ServerReport'?你不需要选择一个或另一个吗? –

回答

0

如果没有默认参数发生错误,那么问题是,除非你提供一个一个<asp:parameter>不提供一个值。您可以从标记或代码中设置DefaultValue属性,该值直接传递给后端。您也可以切换到ControlParameter,SessionParameter等,从其他位置获取值。

+0

如何从我的代码中设置默认值? – Onca

+0

我相信它是'ObjectDataSource1.SelectParameters [“Material”]。DefaultValue =“X”;' –

+0

谢谢,代码无法识别你写的方式ObjectDataSource1。你能给一个改进的代码行吗? – Onca