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
您可以将整个
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
内部调用此方法。