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
}
}
Я избавился от метода Reset(), и теперь я получаю следующую ошибку: экземпляр источника данных не был предоставлен для источника данных DataSet2. Любая помощь? Благодаря! – jre247
Я предполагаю, что «DataSet2» - это имя набора данных в самом объекте отчета. Попробуйте ReportViewer1.LocalReport.DataSources.Add (новый ReportDataSource («DataSet2», ds)); – Jmyster
Спасибо, я заработал! Большое спасибо за Вашу помощь! – jre247