我有一个与Xtra Reports相关的问题和带参数的存储过程。
我一直在使用XtraReports,但我学到了很多东西。问题是我无法以正确的方式完成一项任务。
让我解释一下:
在我的DataSet中,我有一个SP_get_singleRecord
,其中有2个参数(@ID, @TYPE) /*string,int*/
,表格有6列。
因此,我将dataset(dataset1)
,dataMember(SP_get_singleRecord)
和dataAdapter(SP_get_singleRecord_TableAdapter)
添加到xtraReport。
我使用向导来设置字段。
现在我转到xtrareports'fieldList的参数部分,我将参数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_getALLRecords'更改'SP_getSingleRecord'(没有参数)。返回大约6500多条记录,然后从报告的一侧过滤它们,但这需要9秒,这是不可接受的...... 它有效,但它不是正确的方式...... 的
我希望我已经清楚了。 我希望你能帮助我。
提前致谢。
阿尔弗雷德。
答案 0 :(得分:0)
试试这个:
//设置连接字符串
SP_get_singleRecord_TableAdapter.Connection.ConnectionString
//如果你有任何
//然后将此添加到您的Button click事件(到它的开头......)
SP_get_singleRecord_TableAdapter.Fill(dataset1.Yourdatatable, Convert.ToInt32(lookUpEdit_Type.EditValue), lookUpEdit_id.EditValue.ToString())
//在XtraReport上删除数据适配器:dataAdapter(SP_get_singleRecord_TableAdapter)
//还要确保在XtraReport
的最底部只显示DataSet
(没有数据成员,没有表适配器..)
答案 1 :(得分:0)
这是在报告方面。 *两个参数都应该是公开的。 *正如@Milen Pavlov所说,报告必须没有datamembers,但我只使用数据源和数据适配器。
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 });
}
非常有帮助!