I have ASP.NET application and some crystal reports and I need to transfer the following code from ASP.NET and use same functionality in MVC , I am using entity framework.
this is the form.aspx code which i send the parameters value to the other form by using hyperlink and NavigateUrl:
<asp:GridView ID="GridView1" Width="100%" CssClass="dynamicTable table table-striped table-bordered table-condensed" style="color:#000000;background-color:#f4eb3c " AutoGenerateColumns="false" runat="server">
<Columns>
<asp:TemplateField>
<HeaderTemplate>Print</HeaderTemplate>
<ItemTemplate>
<div style="width:100%"> <asp:HyperLink ID="HyperLink1" NavigateUrl='<%#"/RPT/WebForm1.aspx?order_id=" +Eval("order number")+"&DEPT ID=" +Eval("DEPTID")+"&Test Id=" +Eval("Test Id")+"&Culture=" +Eval("Culture")%>' runat="server">Print Result</asp:HyperLink></div>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Patient MRN#</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="LblTest" runat="server" Text='<%# Eval("Patient No") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Order Number</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="LblTest" runat="server" Text='<%# Eval("order number") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Patient Name</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="LblTest" runat="server" Text='<%# Eval("Patient Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>AGE</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="LblTest" runat="server" Text='<%# Eval("AGE") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Request Date</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="LblTest" runat="server" Text='<%# Eval("Collection Date") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Report Date</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="LblTest" runat="server" Text='<%# Eval("Report Date") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Test Name</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="LblTest" runat="server" Text='<%# Eval("Test_Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Result</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="LblTest" runat="server" Text='<%# Eval("Result") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Ref.Range From</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="Reflow" runat="server" Text='<%# Eval("Low Range") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>To</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="Reflow" runat="server" Text='<%# Eval("High Range") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Text Range</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="Reflow" runat="server" Text='<%# Eval("Text Range") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>REQ. FORM NO.</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="req" runat="server" Text='<%# Eval("REQ FORM NUMBER") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate></HeaderTemplate>
<ItemTemplate>
<asp:Label ID="LblTest" Visible="false" runat="server" Text='<%# Eval("DEPTID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate></HeaderTemplate>
<ItemTemplate>
<asp:Label ID="LblTest" Visible="false" runat="server" Text='<%# Eval("Culture") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>No Data Found - لم يتم العثور على بيانات</EmptyDataTemplate>
</asp:GridView>
This is the ASP.NET webform.aspx.cs code :
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
TXTORDERID.Text = Request.QueryString["order_number"].ToString();
TXTDEPTID.Text = Request.QueryString["DEPTID"].ToString();
TXTTESTID.Text = Request.QueryString["Test_Id"].ToString();
TXTCULTURE.Text = Request.QueryString["Culture"].ToString();
ReportDocument reportDocument = new ReportDocument();
ParameterFields paramFields = new ParameterFields();
ParameterField paramField = new ParameterField();
ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();
ParameterDiscreteValue paramDiscreteValue1 = new ParameterDiscreteValue();
ParameterField parameterField1 = new ParameterField();
ParameterDiscreteValue parameterDiscreteValue1 = new ParameterDiscreteValue();
ParameterFields parameterFields = new ParameterFields();
if (Convert.ToInt32(TXTDEPTID.Text) == 7 && Convert.ToInt32(TXTCULTURE.Text) == 1)
{
TXTPOSITIVE.Text = Request.QueryString["Positive"].ToString();
}
if (Session["UserCustid"] != null && Convert.ToInt32(Session["UserCustid"]) > 0)
{
if (Convert.ToInt32(TXTDEPTID.Text) == 1 || Convert.ToInt32(TXTDEPTID.Text) == 2 || Convert.ToInt32(TXTDEPTID.Text) == 3 || Convert.ToInt32(TXTDEPTID.Text) == 4)
{
paramField.Name = "@ORDER_ID";
paramDiscreteValue.Value = TXTORDERID.Text.ToString();
paramField.CurrentValues.Add(paramDiscreteValue);
paramFields.Add(paramField);
paramField = new ParameterField(); // <-- This line is added
paramDiscreteValue = new ParameterDiscreteValue(); // <-- This line is added
paramField.Name = "@deptid";
paramDiscreteValue1.Value = TXTDEPTID.Text.ToString();
paramField.CurrentValues.Add(paramDiscreteValue1);
paramFields.Add(paramField);
CrystalReportViewer1.ParameterFieldInfo = paramFields;
CrystalReportViewer1.ReuseParameterValuesOnRefresh = true;
CrystalReportViewer1.ToolPanelView = CrystalDecisions.Web.ToolPanelViewType.None;
reportDocument.Load(Server.MapPath("~/RPT/RPT_RESULTS.rpt"));
CrystalReportViewer1.ReportSource = reportDocument;
reportDocument.SetDatabaseLogon("DBadmin", "1111");
var connectionInfo = new ConnectionInfo();
connectionInfo.ServerName = "DB";
connectionInfo.DatabaseName = "DB";
connectionInfo.Password = "1111";
connectionInfo.UserID = "DBadmin";
connectionInfo.Type = ConnectionInfoType.SQL;
connectionInfo.IntegratedSecurity = false;
for (int i = 0; i < CrystalReportViewer1.LogOnInfo.Count; i++)
{
CrystalReportViewer1.LogOnInfo[i].ConnectionInfo = connectionInfo;
}
}
else if (Convert.ToInt32(TXTDEPTID.Text) == 5)
{
paramField.Name = "@Criteria";
paramDiscreteValue.Value = TXTORDERID.Text.ToString();
paramField.CurrentValues.Add(paramDiscreteValue);
paramFields.Add(paramField);
paramField = new ParameterField(); // <-- This line is added
paramDiscreteValue = new ParameterDiscreteValue(); // <-- This line is added
paramField.Name = "@TESTID";
paramDiscreteValue1.Value = TXTDEPTID.Text.ToString();
paramField.CurrentValues.Add(paramDiscreteValue1);
paramFields.Add(paramField);
CrystalReportViewer1.ParameterFieldInfo = paramFields;
CrystalReportViewer1.ReuseParameterValuesOnRefresh = true;
CrystalReportViewer1.ToolPanelView = CrystalDecisions.Web.ToolPanelViewType.None;
reportDocument.Load(Server.MapPath("~/RPT/RPT_HISTO_RESULT.rpt"));
CrystalReportViewer1.ReportSource = reportDocument;
reportDocument.SetDatabaseLogon("DBadmin", "1111");
var connectionInfo = new ConnectionInfo();
connectionInfo.ServerName = "DB";
connectionInfo.DatabaseName = "DB";
connectionInfo.Password = "1111";
connectionInfo.UserID = "DBadmin";
connectionInfo.Type = ConnectionInfoType.SQL;
connectionInfo.IntegratedSecurity = false;
for (int i = 0; i < CrystalReportViewer1.LogOnInfo.Count; i++)
{
CrystalReportViewer1.LogOnInfo[i].ConnectionInfo = connectionInfo;
}
}
else if (Convert.ToInt32(TXTDEPTID.Text) == 6 && Convert.ToInt32(TXTTESTID.Text) == 1106)
{
paramField.Name = "@Criteria";
paramDiscreteValue.Value = TXTORDERID.Text.ToString();
paramField.CurrentValues.Add(paramDiscreteValue);
paramFields.Add(paramField);
CrystalReportViewer1.ParameterFieldInfo = paramFields;
CrystalReportViewer1.ToolPanelView = CrystalDecisions.Web.ToolPanelViewType.None;
reportDocument.Load(Server.MapPath("~/RPT/RPT_SEMEN_RESULT.rpt"));
CrystalReportViewer1.ReportSource = reportDocument;
reportDocument.SetDatabaseLogon("DBadmin", "1111");
var connectionInfo = new ConnectionInfo();
connectionInfo.ServerName = "DB";
connectionInfo.DatabaseName = "DB";
connectionInfo.Password = "1111";
connectionInfo.UserID = "DBadmin";
connectionInfo.Type = ConnectionInfoType.SQL;
connectionInfo.IntegratedSecurity = false;
for (int i = 0; i < CrystalReportViewer1.LogOnInfo.Count; i++)
{
CrystalReportViewer1.LogOnInfo[i].ConnectionInfo = connectionInfo;
}
}
IN ASP.NET MVC :
1- I created a webform.aspx.cs and used same code above in MVC project
2- I created the controller code and view this is the view code :
<div id="hemadiv">
@if (labhema1 != null && labhema1.Report_Date.HasValue)
{
<img width="700" height="200" src="~/Contents/images/aljawdahlogo.png" />
<a href="/RPT/WebForm1.aspx/@LABCASHVIEW.FirstOrDefault().order_number">Print Result</a>
<table class="table table-bordered">
<tr>
<td style="text-align:center">
<input type="submit" value="Heamatology Result " onclick="PrintElemhema('#hemadiv')" class="btn btn-primary" />
</td>
</tr>
</table>
<div>
<dl class="horizontal" style="padding:10px">
<dt style="width: 20%;display: inline-block;color:blue;">@Html.DisplayNameFor(model => model.labCashView.FirstOrDefault().Patient_Name)</dt>
<dd style="width: 25%;display: inline-block;margin: 0px;margin-left:-50px">@Html.DisplayFor(model => model.labCashView.FirstOrDefault().Patient_Name)</dd>
<dt style="width: 22%;display: inline-block;color:blue;">@Html.DisplayNameFor(model => model.labCashView.FirstOrDefault().Customer_Name)</dt>
<dd style="width: 25%;display: inline-block;margin: 0px;margin-left:0px">@Html.DisplayFor(model => model.labCashView.FirstOrDefault().Customer_Name)</dd>
<dt style="width: 20%;display: inline-block;color:blue;">@Html.DisplayNameFor(model => model.labCashView.FirstOrDefault().Patient_No)</dt>
<dd style="width: 25%;display: inline-block;margin: 0px;margin-left:-50px">@Html.DisplayFor(model => model.labCashView.FirstOrDefault().Patient_No)</dd>
<dt style="width: 22%;display: inline-block;margin-left:0px;color:blue;">@Html.DisplayNameFor(model => model.labCashView.FirstOrDefault().Collection_Date)</dt>
<dd style="width: 25%;display: inline-block;margin: 0px;margin-left:0px">@Html.DisplayFor(model => model.labCashView.FirstOrDefault().Collection_Date)</dd>
<dt style="width: 20%;display: inline-block;color:blue;">@Html.DisplayNameFor(model => model.labCashView.FirstOrDefault().SEX)</dt>
<dd style="width: 20%;display: inline-block;margin: 0px;margin-left:-50px">@Html.DisplayFor(model => model.labCashView.FirstOrDefault().SEX)</dd>
<dt style="width: 22%;display: inline-block;margin-left:60px;color:blue;">@Html.DisplayNameFor(model => model.labCashView.FirstOrDefault().Receiving_Date)</dt>
<dd style="width: 25%;display: inline-block;margin: 0px;margin-left:0px">@Html.DisplayFor(model => model.labCashView.FirstOrDefault().Receiving_Date)</dd>
<dt style="width: 20%;display: inline-block;color:blue;">@Html.DisplayNameFor(model => model.labCashView.FirstOrDefault().AGE)</dt>
<dd style="width: 20%;display: inline-block;margin: 0px;margin-left:-50px">@Html.DisplayFor(model => model.labCashView.FirstOrDefault().AGE)</dd>
<dt style="width: 22%;display: inline-block;margin-left:60px;color:blue;">@Html.DisplayNameFor(model => model.labCashView.FirstOrDefault().Report_Date)</dt>
<dd style="width: 25%;display: inline-block;margin: 0px;margin-left:0px">@Html.DisplayFor(model => model.labCashView.FirstOrDefault().Report_Date)</dd>
<dt style="width: 20%;display: inline-block;color:blue;">@Html.DisplayNameFor(model => model.labCashView.FirstOrDefault().order_number)</dt>
<dd style="width: 25%;display: inline-block;margin: 0px;margin-left:-50px">@Html.DisplayFor(model => model.labCashView.FirstOrDefault().order_number)</dd>
</dl>
</div>
<div class="tab-pane container active" id="hemadiv">
@*<h5 class="text-uppercase p-2 text-center">Hematology Department</h5>*@
<table class="table table-bordered" cellpadding="5" cellspacing="5" >
<thead>
<tr>
@*<th>@Html.DisplayNameFor(m => m.labCashView.FirstOrDefault().Patient_No)</th>
<th>@Html.DisplayNameFor(m => m.labCashView.FirstOrDefault().Patient_Name)</th>*@
<th>@Html.DisplayNameFor(m => m.labCashView.FirstOrDefault().Test_Name)</th>
<th>@Html.DisplayNameFor(m => m.labCashView.FirstOrDefault().Result)</th>
<th>@Html.DisplayNameFor(m => m.labCashView.FirstOrDefault().Low_Range)</th>
<th>@Html.DisplayNameFor(m => m.labCashView.FirstOrDefault().High_Range)</th>
<th>@Html.DisplayNameFor(m => m.labCashView.FirstOrDefault().Text_Range)</th>
@*<th>@Html.DisplayNameFor(m => m.labCashView.FirstOrDefault().Report_Date)</th>*@
</tr>
</thead>
@foreach (var employee in Model.labCashView.Where(x => hema.Contains(x.DEPTID.GetValueOrDefault())))
{
<tr>
@*<td>@employee.Patient_No</td>
<td>@employee.Patient_Name</td>*@
<td>@employee.Test_Name</td>
<td>@employee.Result</td>
<td>@employee.Low_Range</td>
<td>@employee.High_Range</td>
<td>@employee.Text_Range</td>
@*<td>@employee.Report_Date</td>*@
</tr>
}
</table>
</div>
}
3- this is the controller code :
public ActionResult CashData(int id)
{
var tables = new Orders_Tables
{
testsRanges = db.TestsRanges.ToList(),
LabResults = db.LAB_RESULTS.Where(o => o.ORDER_ID == id)
.Include(p => p.LabTests)
.Include(t => t.Patients).ToList(),
LabParaResult = db.LAB_PARA_RESULTS.Where(o => o.ORDER_ID == id).Include(t => t.Patients).Include(t => t.LabTests).Include(c => c.Customers).ToList(),
LabCultureResults = db.LAB_CULTURE_RESULT.Where(o => o.ORDER_ID == id).Include(t => t.Patients).Include(t => t.LabTests).Include(c => c.Customers).ToList(),
LabMicroResults = db.LAB_MICRO_NEGATIVE_RESULT.Where(o => o.ORDER_ID == id).ToList(),
labCashView = db.LAB_RESULT_CASH_VIEW.Where(o => o.order_number == id).ToList(),
LabParasitologyView = db.LAB_PARASITOLOGY_VIEW.Where(o => o.order_number == id).ToList(),
LabCulturesView = db.LAB_CULTURES_VIEW.Where(o => o.ORDER_ID == id).ToList(),
LabMicroView = db.LAB_MICRO_VIEW.Where(o => o.ORDER_ID == id).ToList(),
LabHistopathologyView = db.LAB_HISTOPATHOLOGY_VIEW.Where(o => o.ORDER_ID == id).ToList(),
LabHistoResult = db.LAB_HISTO_RESULT.Where(o => o.ORDER_ID == id).ToList(),
labtests = db.LabTests.ToList(),
// patients = db.Patients.ToList()
};
4- i created the class LABCASHVIEW
I checked alot of articles in stackoverflow site and one answer just he wrote you can use same design from ASP.NET in ASP.NET MVC
- create webform in your MVC project and pass the parameters from MVC to webform then it will work and print crystal reports as same as ASP.NET . So I did what he said but now I need the final step , How to pass the following parameters from MVC view to webform and print crystal reports :
I need to send the selected order_number , dept_Id , Test_Id and culture parameters from selected row to webform and print crystal report
I used
<a>
tag and href="" to
<a href="/RPT/WebForm1.aspx/@LABCASHVIEW.FirstOrDefault().order_number"></a>
but how to pass all this parameter one time to webform and avoid the error reference object not set to an instance of an object and check if parameters not null first ?
this is the question and answer but no details how to call crystal reports and how to pass multiple parameters to crystal report , for example if i need to print selected order_id or selected invoice :
https://stackguides.com/questions/348785/crystal-reports-in-asp-net-mvc
UPDATE :
I gave static values for these textboxes in webform.aspx.cs
and its printing now :
TXTORDERID.Text = "2000000054";
TXTDEPTID.Text = "1";
TXTTESTID.Text = "46";
TXTCULTURE.Text = "2";
now final issue how to send the value for these text boxes in webform from MVC view as the following :
TXTORDERID.Text = Request.QueryString["labCashView.order_number"].ToString();
TXTDEPTID.Text = Request.QueryString["labCashView.DEPTID"].ToString();
TXTTESTID.Text = Request.QueryString["labCashView.Test_Id"].ToString();
TXTCULTURE.Text = Request.QueryString["labCashView.Culture"].ToString();