Передача параметра в отчет Telerik

У меня есть проект отчета телерика, добавленный на мой веб-сайт, и я пытаюсь передать ему параметр, но получаю следующую ошибку

Ошибка:

В экземпляре объекта не задана ссылка на объект.

Код Asp.net

protected void Page_Load(object sender, EventArgs e)
{
   if (!Page.IsPostBack)
    {
        MembershipCard rpt = new MembershipCard();
        // Error occuring here
        rpt.ReportParameters["@MemberID"].Value = "5"; // Request["MemberID"];
        ReportViewer1.Report = rpt;
    }        
}

Класс отчета Телерика

    public MembershipCard()
    {
        /// <summary>
        /// Required for telerik Reporting designer support
        /// </summary>
        InitializeComponent();
        this.DataSource = null;
    }

    private void MembershipCard_NeedDataSource(object sender, EventArgs e)
    {
        string proc = "rpt_MembershipCard" + this.ReportParameters["@MemberID"].Value.ToString();
        SqlDataAdapter adapter = new SqlDataAdapter(proc, "Data Source=(local); Initial Catalog= northwind; intergrated security = True");
        DataSet dataSet = new DataSet();
        adapter.Fill(dataSet);
        (sender as Telerik.Reporting.Processing.Report).DataSource = dataSet;
    }

Может кто-нибудь указать мне правильное направление, я не смог найти ничего подходящего в Интернете.


person Noelle    schedule 20.11.2012    source источник


Ответы (1)


Проблема в том, что вы не предоставляете параметры. Попробуйте изменить:

rpt.ReportParameters.Add("MemberID", "5");

И:

string proc = this.ReportParameters["MemberID"].Value.ToString();

Кроме того, если вы добавили файл DataSet.xsd в решение, используйте его сгенерированный файл TableAdapter.

Пример хранимой процедуры:

using System.Data;
using YourNamespace.StoredProcedureNameTableAdapter;

//Keep in mind StoredProcedureName is taken from SP name in your database
//when you add DataSet.xsd to your solution by default if you don't change anything

private void ClassName_NeedDataSource(object sender, EventArgs e)
{
   int someID = int.Parse(this.ReportParameters["ParameterID"].Value.ToString());
   StoredProcedureNameTableAdapter adapter = new StoredProcedureNameTableAdapter();
   DataSetFile.StoredProcedureNameDataTable data = adapter.GetData(someID); //DataSetFile is DataSetFile.xsd and GetData is method name you defined on DataSetFile.xsd creation
   ((Telerik.Reporting.Processing.Report)sender).DataSource = data.AsDataView();
}
person Dusan Vasiljevic    schedule 20.11.2012
comment
Когда я пробую ваше предложение, я получаю сообщение об ошибке «rpt_PrintMembershipCard» не содержит определения для «ReportParameters», и не может быть найден метод расширения «ReportParameters», принимающий первый аргумент типа «rpt_PrintMembershipCard» (вам не хватает директивы использования или сборки ссылка?) - person Noelle; 20.11.2012
comment
@Wellie Является ли имя rpt_PrintMembershipCard созданным вами отчетом? У вас должен быть файл rpt_PrintMembershipCard.cs. Ваше определение класса должно быть: public partial class rpt_PrintMembershipCard : Telerik.Reporting.Report - person Dusan Vasiljevic; 20.11.2012
comment
файл .cs — MembershipCard.cs, а веб-страница, на которой находится средство просмотра отчетов, — rpt_PrintMembershipCard. - person Noelle; 20.11.2012
comment
Первый блок кода — это то, что вы пишете в коде страницы ASP.NET. Имейте в виду, что rpt — это та же ссылка, которую вы использовали в своем коде. Остальные 2 блока прописаны в разделах кода отчета. Можете ли вы скопировать строку, которая дает вам исключение? - person Dusan Vasiljevic; 20.11.2012
comment
здесь выдается исключение ‹code› rpt.ReportParameters[@MemberID].Value = 5;'‹/code› но оказывается, что я пропустил @ при объявлении параметра - person Noelle; 27.11.2012