为什么 if 语句在调用 crystal 报告 asp.net 时无法在多个条件下按预期工作?

why if statement not working as expected with multiple conditions when calling crystal reports asp.net?

我正在医学化验系统中打印结果报告,并且我有带有 && 和 || 的多个条件的 IF 语句,然后我根据该条件调用 crystal 报告,并在 运行 报告时使用存储过程并传递参数。 IF 语句不起作用且未将参数传递给报表。 我在单击打印 link 和页面加载时使用此代码:

    protected void Page_Load(object sender, EventArgs e)
{

            if (!IsPostBack)
            {


                TXTORDERID.Text = Request.QueryString["order_id"].ToString();
                TXTDEPTID.Text = Request.QueryString["DEPT ID"].ToString();

    if (Convert.ToInt32(Session["custid"]) > 1 && 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(); 
                            paramDiscreteValue = new ParameterDiscreteValue(); 
                            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;
}

现在,当我像这段代码一样使用 IF 语句时,它不会将参数直接传递给报告,而是要求报告参数 order_id 和 dept_id

if (Convert.ToInt32(Session["custid"]) > 1 && Convert.ToInt32(TXTDEPTID.Text) == 1 || Convert.ToInt32(TXTDEPTID.Text) == 2 || Convert.ToInt32(TXTDEPTID.Text) == 3 || Convert.ToInt32(TXTDEPTID.Text) == 4 )

当我像这段代码一样使用 IF 语句和 () 之后 && 它不要求参数和 运行 空报告

if (Convert.ToInt32(Session["custid"]) > 1 && (Convert.ToInt32(TXTDEPTID.Text) == 1 || Convert.ToInt32(TXTDEPTID.Text) == 2 || Convert.ToInt32(TXTDEPTID.Text) == 3 || Convert.ToInt32(TXTDEPTID.Text) == 4) )

如何将 IF 语句更新为 运行 报表而不询问报表参数值 @order_id 和 @deptid?

我知道它是旧的 post,但如果它对其他人有帮助的话

基本上你的 2 个 if 语句总结如下

  • if( boolean1 && boolean2 || boolean3 || boolean4 || boolean5)
    该表达式计算 boolean1 和 boolean2 如果为真则检查剩余的

  • if(boolean1 && (boolean2 || boolean3 || boolean4 || boolean5))
    表达式 evaulates boolean1 && 括号中boolean的结果

您可以阅读 Conditional logical operators 及其 short-circuit 行为 here