У меня есть приложение ASP.NET и несколько кристаллических отчетов, и мне нужно передать следующий код из ASP.NET и использовать те же функции в MVC, я использую структуру сущностей.
это код form.aspx, который я отправляю значение параметров в другую форму, используя гиперссылку и 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>
Это код ASP.NET webform.aspx.cs:
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;
}
}
В ASP.NET MVC:
1- Я создал webform.aspx.cs и использовал тот же код, что и выше, в проекте MVC.
2- Я создал код контроллера и вижу, что это код представления:
<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- это код контроллера:
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- я создал класс LABCASHVIEW
Я проверил множество статей на сайте stackoverflow, и один ответ, который он написал, вы можете использовать тот же дизайн из ASP.NET в ASP.NET MVC
- создайте веб-форму в своем проекте MVC и передайте параметры из MVC в веб-форму, после чего она будет работать и печатать кристаллические отчеты так же, как ASP.NET. Итак, я сделал то, что он сказал, но теперь мне нужен последний шаг, как передать следующие параметры из представления MVC в веб-форму и распечатать отчеты Crystal:
Мне нужно отправить выбранные параметры order_number, dept_Id, Test_Id и культуры из выбранной строки в веб-форму и распечатать отчет кристалла, который я использовал теги <a>
и href="" to
<a href="/RPT/WebForm1.aspx/@LABCASHVIEW.FirstOrDefault().order_number"></a>
но как передать весь этот параметр один раз в веб-форму и избежать ссылки на объект ошибки, не установленной для экземпляра объекта, и проверить, не являются ли параметры сначала нулевыми?
это вопрос и ответ, но без подробностей, как вызвать отчеты Crystal и как передать несколько параметров в отчет Crystal, например, если мне нужно распечатать selected order_id или selected invoice:
https://stackoverflow.com/questions/348785/crystal-reports-in-asp-net-mvc
ОБНОВИТЬ :
Я дал статические значения для этих текстовых полей в webform.aspx.cs
и теперь его печать:
TXTORDERID.Text = "2000000054";
TXTDEPTID.Text = "1";
TXTTESTID.Text = "46";
TXTCULTURE.Text = "2";
теперь последняя проблема, как отправить значение для этих текстовых полей в веб-форме из представления MVC следующим образом:
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();
labCashView
никогда не может быть нулевым, используйтеFirst()
вместоFirstOrDefault
. В противном случае обработайте случай, когда он равен нулю, иначе приложение выйдет из строя. А еще лучше создать модель специально для вашего вида; поскольку вашему представлению нужен один элемент, не отправляйте ему список. 22.06.2020