2017-07-30 92 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個產品有「不完整」,訂單狀態=後退訂單。 默認情況下,所有產品均未收到,訂單狀態未收到。

這是我的代碼。但它始終使訂單狀態=「完成訂單」。 順便說一句,我把這個代碼點擊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

按照您的邏輯循環將在第一個實例突破時產品狀態'unrecieived'。因此,如果您的訂單具有所有具有該狀態的產品,則循環將與第一個產品斷開,並且'complete'變量將爲true,這就是爲什麼'complete'的if塊將執行並且您的訂單將顯示爲完整。你需要把'if(!state.Equals(「Complete」))'先阻塞並打破循環。 –

+0

感謝您的輸入先生,我似乎無法使其工作。我只是決定將方法分爲兩部分。我認爲這會更容易。 – FutureDev

回答

0

請試試這個,我認爲這將不分裂碼工作...

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