2017-07-30 9 views
0

私はこの製品にこの注文表を持っています。製品のステータスに応じてステータスを変更します。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 + "' "); 

      } 
     }   
    } 
+0

...、私はそれが分割コードなしで動作すると思い、これを試してみてください。したがって、あなたの注文にそのステータスを持つすべての製品がある場合、ループは最初の製品と壊れてしまい、 'complete'変数が真となり、' complete'のifブロックが実行され、注文が完了として表示されます。 'if(!state.Equals(" Complete "))'を最初にブロックし、ループを解除する必要があります。 –

+0

入力していただきありがとうございます。私はそれを動作させるように見えません。私はちょうど2つの部分にメソッドを分割することを決めた。私はそれがより簡単になると思います。 – FutureDev

答えて

0

製品は、ステータス `unrecieived`を持っているとき、ループは非常に最初のインスタンスで壊れるあなたのロジックを1として

private void checkorderstatus() 
{ 
    bool Unreceived = 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("Complete")) 
      { 
       complete = false; 
       if (!state.Equals("Unreceived")) 
       { 
        Unreceived = false ; 
       } 
       break; 
      } 

     } 


     if (complete) 
     { 
      crud.AddRecord("Update Orders Set Status = 'Complete Order' where OrderID = '" + rrorderid.Text + "' "); 

     }else if (Unreceived) 
     { 
      crud.AddRecord("Update Orders Set Status = 'Unreceived' where OrderID = '" + rrorderid.Text + "' "); 

     }else 
     { 
      crud.AddRecord("Update Orders Set Status = 'Back Order' where OrderID = '" + rrorderid.Text + "' "); 


     } 
    } 
} 
+0

それは感謝しました:) – FutureDev

関連する問題