I want to pass a sql parameter from user form to my report class but it is not working and it does not create the report and when I open the report designer tab again after adding ID argument to the report class it refresh the report and delete my components.
What is the problem?
Here is my report class:
public SodoorZemanatName(long ID)
{
InitializeComponent(ID);
}
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Designer generated code
private void InitializeComponent(long ID)
{
this.components = new System.ComponentModel.Container();
DevExpress.DataAccess.Sql.CustomSqlQuery customSqlQuery1 = new DevExpress.DataAccess.Sql.CustomSqlQuery();
DevExpress.DataAccess.Sql.QueryParameter queryParameter1 = new DevExpress.DataAccess.Sql.QueryParameter();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SodoorZemanatName));
this.topMarginBand1 = new DevExpress.XtraReports.UI.TopMarginBand();
this.detailBand1 = new DevExpress.XtraReports.UI.DetailBand();
this.bottomMarginBand1 = new DevExpress.XtraReports.UI.BottomMarginBand();
this.sqlDataSource2 = new DevExpress.DataAccess.Sql.SqlDataSource(this.components);
((System.ComponentModel.ISupportInitialize)(this)).BeginInit();
this.topMarginBand1.HeightF = 100F;
this.topMarginBand1.Name = "topMarginBand1";
this.detailBand1.HeightF = 100F;
this.detailBand1.Name = "detailBand1";
this.bottomMarginBand1.HeightF = 100F;
this.bottomMarginBand1.Name = "bottomMarginBand1";
this.sqlDataSource2.ConnectionName = "Context";
this.sqlDataSource2.Name = "sqlDataSource2";
customSqlQuery1.Name = "Query";
queryParameter1.Name = "ID";
queryParameter1.Type = typeof(long);
queryParameter1.ValueInfo = "0";
queryParameter1.Value = ID;
customSqlQuery1.Parameters.Add(queryParameter1);
customSqlQuery1.Sql = "select * from LG_Garanti where ID=@ID";
this.sqlDataSource2.Queries.AddRange(new DevExpress.DataAccess.Sql.SqlQuery[] {
customSqlQuery1});
this.sqlDataSource2.ResultSchemaSerializable = resources.GetString("sqlDataSource2.ResultSchemaSerializable");
this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {
this.topMarginBand1,
this.detailBand1,
this.bottomMarginBand1});
this.ComponentStorage.AddRange(new System.ComponentModel.IComponent[] {
this.sqlDataSource2});
this.DataSource = this.sqlDataSource2;
this.Version = "15.2";
((System.ComponentModel.ISupportInitialize)(this)).EndInit();
}
#endregion
And here is my calling:
SodoorZemanatName report = new SodoorZemanatName(1);
ASPxDocumentViewer1.ReportTypeName = "SodoorZemanatName";
ASPxDocumentViewer1.Report = report;
I guess you want to (1) click the button, (2) pass an ID then (3) open the report has content depends on that ID. So this is the way I did it, (I'm not sure is there any other way because devexpress is not open source):
In you form, window form or whatever, the below should be inside the function triggered by button_click event (your "calling" in the last snippet of your question):
DataSet new_ds = new DataSet();
ReportDataset.MyTable runtime_data = new ReportDataset.MyTable();
//get data from your database according to ID, Row by row
//then add them to the runtime_data table
//in your case, add all the result of "select * from LG_Garanti where ID=@ID";
runtime_data.Rows.Add(new object[] {.blah blah..});// just add row, use whatever method you like
new_ds.Tables.Add(runtime_data);
//from this point, new_ds contains runtime data of the row(s) you want ID.
//now just link that dynamic dataset to your designed report
MyReport my_report = new MyReport();
my_report.DataSource = new_ds;
// Show the print preview or do whatever you want
ReportPrintTool printTool = new ReportPrintTool(my_report);
printTool.ShowRibbonPreviewDialog();
The above is to make it more flexible since the report can use its own dataset with the mixture of different tables,.... You can make it easier by reuse your own dataset in step 1. Hope this helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With