2013-04-22 2 views
0

У меня есть вопрос, связанный с отчетами Xtra и хранимыми процедурами с параметрами.Создание XtraReports с параметрами с: (хранимые процедуры с параметрами)

Я использую XtraReports недолго, но я многому научился. Дело в том, что я не смог выполнить одну задачу правильно.

Поясню:

В моей DataSet У меня есть один SP_get_singleRecord, который имеет 2 параметра (@ID, @TYPE) /*string,int*/ и таблица имеет 6 столбцов.

Итак, я добавляю dataset(dataset1), dataMember(SP_get_singleRecord) и dataAdapter(SP_get_singleRecord_TableAdapter) в xtraReport. Я использую мастер для установки полей на месте.

Теперь перейдите в раздел параметров на FieldList xtrareports' и добавить параметр ID в string и TYPE как int.

Тогда я иду к строке фильтра и установить параметры, как это: [ID] = ?ID And [TYPE] = ?TYPE

Теперь я хожу в WindowsForm -> print_simplebuttonEvent_OnClick

Я передаю параметры тихо так:

private void btn_print_Click(object sender, EventArgs e) 
    { 
     //convert parameters from controls 
     int type = Convert.ToInt32(lookUpEdit_Type.EditValue); 
     string id = lookUpEdit_id.EditValue.ToString(); 

     // Create a report instance 
     Xtrareport report = new Xtrareport(); 

     // Obtain a parameter, and set its value. 
     report.ID.Value = id; 
     report.TYPE.Value = type; 

     // Hide the Parameters UI from end-users. 
     report.ID.Visible=false; 
     report.TYPE.Visible = false; 

     // Show the report's print preview. 
     report.ShowPreview(); 
    } 

Затем появляется сообщение об ошибке: Error when trying to populate the datasource. The following exception was thrown: Procedure or function 'SP_getSingleRecord' expects parameter '@ID' which was not supplied.

В соответствии с этим параметры, которые я прошел, никогда не достигали хранимой процедуры. Я пытаюсь получить одну запись перед печатью отчета, но я не знаю, что я здесь отсутствует ...

Я попробовал еще один способ сделать это, но это предполагает изменение «SP_getSingleRecord 'для' SP_getALLRecords '(без параметров). Это возвращает около 6500+ записей, а затем отфильтровать их из стороны отчета, но это занимает 9 секунд, что не является приемлемым ... Это работает, но это не правильный путь ...

Я надеюсь, что я поняла. Надеюсь, вы можете мне помочь.

Заранее спасибо.

Альфред.

ответ

0

Попробуйте:

// устанавливаем строки соединения

SP_get_singleRecord_TableAdapter.Connection.ConnectionString

// если у вас есть какой-либо

// добавьте это к вашему событию кнопки мыши (к началу Это...)

SP_get_singleRecord_TableAdapter.Fill(dataset1.Yourdatatable, Convert.ToInt32(lookUpEdit_Type.EditValue), lookUpEdit_id.EditValue.ToString())

// На вашем XtraReport удалите адаптер данных: dataAdapter(SP_get_singleRecord_TableAdapter)

// Также убедитесь, что на самом дне Йор XtraReportDataSet не показывается только (нет элементов данных, нет таблицы адаптеры ..)

+0

Вам не нужно передавать параметры молча, а также 'Report.DataSource = dataset1.SP_get_singleRecord' сразу после инициализации отчета. – Milen

0

хорошо, что я заработал. Я не знал о некоторых специальных функциях, которые имеют devxpress и xtrareports.

Это было на стороне отчета. * оба параметра должны быть общедоступными. * как @Milen Pavlov сказал, что в отчете не должно быть данных, но я получил его только с источником данных и адаптером данных.

private void XtraReport1_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) { 
     spGetSingleRecord_tableadapter.Fill(
      (this.DataSource as DataSet1).spGetSingleRecord, Parameters["ID"].Value.ToString(), Convert.ToInt32(Parameters["TYPE"].Value)); 
// the parameters are the ones on the report, not the stored procedure. 

    } 

и в виде сбоку:

private void button1_Click(object sender, EventArgs e) { 
     XtraReport1 report = new XtraReport1(); 

     report.RequestParameters = false; 
     report.ID.Value = lookupedit1.editvalue; 
     report.TYPE.Value = lookupedit2.editvalue; 
     report.ID.Visible = false; 
     report.TYPE.Visible = false; 

     report.ShowPreview(); 
     report.PrintingSystem.ExecCommand(DevExpress.XtraPrinting.PrintingSystemCommand.Parameters, new object[] { true }); 

    } 

это было очень полезно!

+0

Откуда берутся типы XtraReport1 и Dataset1? – Grantly