我想在 opdnew 时退出 foreach 循环和 while 循环<0

问题描述 投票:0回答:1
protected void btnOPDDetect_Click(object sender, EventArgs e)
{

    SqlConnection con1 = GetConnection();
    SqlConnection con = GetConnection();
    DataTable dt = new DataTable();

    double opdnew;
    string batchNo = lblIdforReport.Text;
    SqlCommand cmd = new SqlCommand("Select ExpenseSheetNo,FurtherDetail,FurtherDetailBy,Id,VoucherStatus,Convert(nvarchar(50),Date,106) As Date,ProcessType,ProgramDepartment,CompanyPerson,PreparedBy,RecommendedStatus,Convert(nvarchar(50),PreparedDate,106) As PreparedDate,SubmittedBy,Convert(nvarchar(50),SubmittedDate,106) As SubmittedDate,RecommendedBy,Convert(nvarchar(50),RecommendedDate,106) As RecommendedDate,FurtherDetailBy,Supervisior,TotalAmount From tb_ManageExpenseSheetOne where IsCheckedAdvance='true' and FinanceOfficer='" + User.Identity.Name + "' and SubmittedStatus='Submitted' and   VoucherStatus='Voucher Created' and RecommendedStatus='Recommended' and  BatchNo='" + Convert.ToInt64(batchNo) + "'  order by ExpenseSheetNo", con);
    SqlDataAdapter adapter = new SqlDataAdapter(cmd);

    adapter.Fill(dt);


    foreach (DataRow row in dt.Rows)
    {
     
        string PreparedBy = row["PreparedBy"].ToString();
        string TotalAmount = row["TotalAmount"].ToString();
        string constr = ConfigurationManager.ConnectionStrings["HhrdApprovalSystem"].ConnectionString;

        string selectSql = "SELECT * from tb_Person where Name='" +PreparedBy+ "'";
        SqlCommand cmdcheck = new SqlCommand(selectSql, con1);

            using (SqlCommand cmd1 = new SqlCommand())
            {
      try
        {
            con1.Open();

            using (SqlDataReader reader = cmdcheck.ExecuteReader())
            {
               while(reader.Read())
                 {
                
                    TextBox13.Text = (reader["RemainingOPD"].ToString());
                    TextBox14.Text = TotalAmount.ToString();

                     opdnew = ((Convert.ToDouble(TextBox13.Text)) - (Convert.ToDouble(TextBox14.Text)));
                    if (opdnew < 0)
                    {
                       
                        lblWarning.Text = "'" + PreparedBy + "' OPD is not enough";
                        break;
                       
                    }
                }
                   
                
            }
        }
        finally
        {
            con1.Close();
        }
                cmd1.CommandText = "Update tb_Person Set remainingOPD= '" + ((Convert.ToDouble(TextBox13.Text)) - (Convert.ToDouble(TextBox14.Text))) + "'WHERE Name ='" + PreparedBy.ToString() + "'";
                cmd1.Connection = con;
                con.Open();
                cmd1.ExecuteScalar();
                con.Close();
            }
    }

    btnArchive.Visible = true;
    
}

我在tb_person中有remainingopd列,在tb_ManageExpenseSheetOne中有totalAmount列。我必须从remainingOPD中减去totalAmount并更新tb_Personremainopd列。

例如

tb_ManageExpenseSheetOne

|姓名|总金额| | ----| | |一个 | 4000 | |乙| 5000 | | C | 0 |

Foreach 循环从 tb_ManageExpenseSheetOne 获取所有人的姓名/PreparedBy 和总金额

然后我使用 while 循环通过减去totalAmount 来获取remnainingOPD,并检查减去NewOPD 后是否小于0。

如果小于 0,我想显示更新 tb_person 中任何记录的消息。 如果 newOPD > 0 那么我想根据 tb_ManageexpensesheetOne 中的所有记录更新 tb_person

c# asp.net webforms
1个回答
0
投票

您可以将整个

foreach
循环移至单独的方法中,并使用
return
退出所有嵌套循环。例如:

    //new method
    private void CheckOPD()
    {
        foreach (DataRow row in dt.Rows)
        {
            ... your loop code

            while(reader.Read())
            {
                ...code
                if (opdnew < 0)
                {
                    return; // here you use a return
                }
            }
        }
    }

并在

btnOPDDetect_Click
内部调用此方法。

© www.soinside.com 2019 - 2024. All rights reserved.