私はこの製品にこの注文表を持っています。製品のステータスに応じてステータスを変更します。datagridview
OrderID : 001 Order Status : ---------
Products Ordered Qty : 3
Products Ordered: (in datagridview)
Status ProductName QtyOrdered QtyReceived
============================================================
Unreceived p1 2 0
Complete p2 3 3
Incomplete p3 4 4
今そのためのステータスがDataGridViewの中の製品の状態に応じて変更することになっている:それはこのような何かを見ました。
すべての製品ステータスが「完了」の場合は、注文ステータス=注文完了です。 製品のうち1つでも「不完全」と表示されている場合は、Order Status = Back Ordersとなります。 デフォルトでは、すべての製品が未受領で、受注ステータスは未受領です。
これは私のコードです。しかし、常にOrder Status = "Complete Orders"になります。 ところで、このコードをClick DataGridViewイベントに追加すると、このコードが表示されます。
private void checkorderstatus()
{
bool incomplete = true;
bool complete = true;
if(dgvReceivedproducts.Rows.Count == Convert.ToInt32(rrQty.Text))
{
foreach (DataGridViewRow rw in dgvReceivedproducts.Rows)
{
string state =
rw.Cells[dgvReceivedproducts.Columns["Status"].Index].Value.ToString();
if (state.Equals("Unreceived"))
{
incomplete = false;
break;
}
else if (state.Equals("Incomplete"))
{
incomplete = true;
}
if (!state.Equals("Complete"))
{
complete = false;
break;
}
}
if (incomplete)
{
crud.AddRecord("Update Orders Set Status = 'Back Order'
where OrderID = '" + rrorderid.Text + "' ");
}
if (complete)
{
crud.AddRecord("Update Orders Set Status = 'Complete Order'
where OrderID = '" + rrorderid.Text + "' ");
}
}
}
...、私はそれが分割コードなしで動作すると思い、これを試してみてください。したがって、あなたの注文にそのステータスを持つすべての製品がある場合、ループは最初の製品と壊れてしまい、 'complete'変数が真となり、' complete'のifブロックが実行され、注文が完了として表示されます。 'if(!state.Equals(" Complete "))'を最初にブロックし、ループを解除する必要があります。 –
入力していただきありがとうございます。私はそれを動作させるように見えません。私はちょうど2つの部分にメソッドを分割することを決めた。私はそれがより簡単になると思います。 – FutureDev