Reportviewer не отображает отчет должным образом - PullRequest
0 голосов
/ 07 марта 2012

РЕДАКТИРОВАТЬ: я сделал это так, что я выполняю оператор SQL вместо хранимой процедуры, просто для отладки. Теперь у меня есть ошибка: экземпляр источника данных не был предоставлен для источника данных «DataSet2». Я также избавился от ReportViewer1.Reset ();

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

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

Вот моя разметка Reports.aspx, в которой есть средство просмотра отчетов:

<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>

Вот отчеты.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
}  

}

1 Ответ

0 голосов
/ 07 марта 2012

Где находится ваш путь к отчету ReportViewer1.LocalReport.Path = "Report1.rdlc";

РЕДАКТИРОВАТЬ: Неважно, я вижу это в XAML

РЕДАКТИРОВАТЬ 2: Вы вызываете ReportViewer1.Сброс();Это очищает LocalReport.Вы должны снова установить путь к отчету.

...