2012-03-06 3 views
0

EDIT: Я сделал так, что я выполняю инструкцию sql вместо хранимой процедуры, просто для отладки. У меня теперь есть ошибка: экземпляр источника данных не был предоставлен для источника данных «DataSet2». Я также избавился от ReportViewer1.Reset();Reportviewer не отображает отчет правильно

Я пытаюсь выяснить, почему мой Reportviewer не отображает отчет, как он должен после того, как пользователь нажимает кнопку «RunReportButton» в Report.aspx. У меня есть оператор sql, который имеет 2 параметра: @PersonID и @Category. этот оператор sql ищет все записи в таблице PersonExercise, которые имеют PersonID = @PersonID и @Category = Category. Я выполняю набор данных на основе этого оператора sql, а затем передаю его в свой файл reportDataSource в коде моих отчетов report.aspx.

Затем я создал Report1.rdlc и связал это с моим набором данных dsCardio. Я перетащил ExerciseDate, Distance, Speed ​​из моего набора данных в матрицу на Report1.rdlc. Когда пользователь нажимает на RunReportButton на Reports.aspx, я получаю следующую ошибку: «Экземпляр источника данных не был предоставлен для источника данных« DataSet2 ». Я отлаживал свой код, и я видел, что thisDataSet.Tables [0] .Rows.Count = 3, который он должен. У меня также есть processmode = local для reportviewer. Любая помощь? Спасибо!

Вот мой Reports.aspx разметки, который имеет ReportViewer:

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> 

<asp:Label ID="lblMessage" runat="server" Text="Label"></asp:Label> 
<br /> 
<br /> 
<asp:DropDownList ID="DropDownList1" runat="server"> 
    <asp:ListItem>Cardiovascular</asp:ListItem> 
    <asp:ListItem>Weight Lifting</asp:ListItem> 
</asp:DropDownList> 
<asp:ScriptManager ID="ScriptManager1" runat="server"> 
</asp:ScriptManager> 


<asp:Button ID="RunReportButton" runat="server" 
    onclick="RunReportButton_Click1" Text="Run Report" Height="27px" 
    Width="84px" /> 


<rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana" 
    Font-Size="8pt" InteractiveDeviceInfos="(Collection)" 
    WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt" 
    Visible="False"> 
    <LocalReport ReportPath="Report1.rdlc"> 

    </LocalReport> 
</rsweb:ReportViewer> 




</asp:Content> 

Вот Reports.aspx.cs:

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

namespace ExerciseTracker2000 
{ 
public partial class Reports : System.Web.UI.Page 
{ 
    #region Properties 

    public static string ConnectionString { get; set; } 
    public static int personID { get; set; } 
    #endregion 

    #region Variables 

    public int personID = 0; 
    public SqlParameter[] SearchValue = new SqlParameter[2]; 

    #endregion 

    #region Page Events 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     personID = CommonMethods.getLoggedInUser();   
    } 

    protected void RunReportButton_Click1(object sender, EventArgs e) 
    { 
     try 
     { 
      DataSet ds = new DataSet(); 
      string strCategory = ddlCategory.SelectedValue; 
      // strSQL select for orders with no invoices 
      strSQL = "SELECT PersonID, ExerciseDate, Category, Exercise, Duration, Distance, Speed"; 
      strSQL = strSQL + " from dbo.PersonExercise"; 
      strSQL = strSQL + " where PersonID = " + personID + " And Category = '" + strCategory + "'"; 

      using (var connection = new SqlConnection(ConnectionString)) 
      { 
       SqlDataAdapter ad = new SqlDataAdapter(strSQL, connection); 

       ad.Fill(ds, "Table0"); 

      } 


      //ReportViewer1.Visible is set to false in design mode 
      ReportViewer1.Visible = true; 
      SqlConnection thisConnection = new SqlConnection(ConnectionString); 


      /* Associate thisDataSet (now loaded with the stored 
       procedure result) with the ReportViewer datasource */ 
      Microsoft.Reporting.WebForms.ReportDataSource datasource = new 
      Microsoft.Reporting.WebForms.ReportDataSource("DataSetCategories_ShowExercisesByCategory", ds.Tables[0]); 


      ReportViewer1.LocalReport.DataSources.Clear(); 
      ReportViewer1.LocalReport.DataSources.Add(datasource); 

      if (thisDataSet.Tables[0].Rows.Count == 0) 
      { 
       lblMessage.Text = "Sorry, no products under this category!"; 
      } 

      ReportViewer1.LocalReport.Refresh(); 
     } 
     catch (Exception ex) 
     { 
      lblMessage.Text = "Error: " + ex.Message.ToString(); 
     } 
    } 

    #endregion 
} 

} 

ответ

0

Где ваш путь к t он сообщает ReportViewer1.LocalReport.Path = "Report1.rdlc";

EDIT: Nevermind, я вижу это в XAML

EDIT2: Вы называете ReportViewer1.Reset(); Это очищает LocalReport. Вам нужно снова установить путь к отчету.

+0

Я избавился от метода Reset(), и теперь я получаю следующую ошибку: экземпляр источника данных не был предоставлен для источника данных DataSet2. Любая помощь? Благодаря! – jre247

+0

Я предполагаю, что «DataSet2» - это имя набора данных в самом объекте отчета. Попробуйте ReportViewer1.LocalReport.DataSources.Add (новый ReportDataSource («DataSet2», ds)); – Jmyster

+0

Спасибо, я заработал! Большое спасибо за Вашу помощь! – jre247

Смежные вопросы