如何将此代码从 ASP.NET 传输到 ASP.NET MVC 以打印 crystal 报告

How to transfer this code from ASP.NET to ASP.NET MVC to print crystal reports

我有 ASP.NET 应用程序和一些 crystal 报告,我需要从 ASP.NET 传输以下代码并在 MVC 中使用相同的功能,我正在使用 entity framework .

这是 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;
                    }
                }

IN 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- 我创建了 class LABCASHVIEW

我检查了 Whosebug 网站上的很多文章和他写的一个答案你可以在 ASP.NET MVC

中使用来自 ASP.NET 的相同设计

我需要将选定的 order_number 、 dept_Id 、 Test_Id 和文化参数从选定的行发送到网络表单并打印 crystal 报告 我用了 <a> 标签和 href="" to

<a href="/RPT/WebForm1.aspx/@LABCASHVIEW.FirstOrDefault().order_number"></a>

但是如何将所有这些参数一次传递给 webform 并避免错误引用对象未设置为对象的实例并首先检查参数是否不为空?

这是问题和答案,但没有详细说明如何调用 crystal 报告以及如何将多个参数传递给 crystal 报告,例如,如果我需要打印选定的 order_id或所选发票:


更新:

我在 webform.aspx.cs
中为这些文本框提供了静态值 及其印刷:

            TXTORDERID.Text = "2000000054";
            TXTDEPTID.Text = "1";
            TXTTESTID.Text = "46";
            TXTCULTURE.Text = "2";

现在是最后一个问题,如何从 MVC 视图发送 webform 中这些文本框的值,如下所示:

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();

如我所见,您已完成所有操作,您需要将参数从 View 传递到 crystal 报告试试这个解决方案:

<a href="/RPT/WebForm1.aspx/?order_number=@Model.labCashView.FirstOrDefault().order_number&deptid=@Model.labCashView.FirstOrDefault().DEPTID&testid=@Model.labCashView.FirstOrDefault().Test_Id&Culture=@Model.labCashView.FirstOrDefault().Culture">Print Result</a>

然后在webform.aspx.cs中写下下面的代码,并使用从link传来的值:

TXTORDERID.Text = Request.QueryString["order_number"].ToString();
            TXTDEPTID.Text = Request.QueryString["deptid"].ToString();
            TXTTESTID.Text = Request.QueryString["testid"].ToString();
            TXTCULTURE.Text = Request.QueryString["Culture"].ToString(); 

希望这会对您有所帮助并在您的 MVC 视图中打印 crystal 报告。