2016-07-30 80 views
0

你好,我正試圖添加項目,如果條件滿足,從gridview的數據表。數據表中的多條記錄

的條件是ReceivedQuantity < OrderedQuantity

的問題是,如果我有一個滿足的條件僅DataTable中採取一個項目一個以上的項目。

代碼

List<string> PurchaseReturnsItems = new List<string>(); 
foreach (GridViewRow row in griddelpur.Rows) 
{ 
    if (row.RowType == DataControlRowType.DataRow) 
    { 
     CheckBox chkRow = (row.Cells[0].FindControl("chkSel") as CheckBox); 
     if (chkRow.Checked) 
     { 
      string PurchaseOrderDetailID = row.Cells[1].Text; 
      string itemcode = row.Cells[2].Text; 
      string itemname = row.Cells[3].Text; 
      string UOM = row.Cells[4].Text; 
      string OrderedQuantity = row.Cells[5].Text; 
      string ReceivedQuantity = (row.Cells[6].FindControl("txtReceivedQty") as TextBox).Text; 
      string Comments = (row.Cells[7].FindControl("txtComments") as TextBox).Text; 
      string ItemID = row.Cells[8].Text; 

      if (Convert.ToInt32(ReceivedQuantity) < Convert.ToInt32(OrderedQuantity)) 
      { 
       PurchaseReturnsItems.Add(ItemID); 
       DataTable tbl = new DataTable(); 
       tbl.Clear(); 
       tbl.Columns.Add("ItemID"); 
       tbl.Columns.Add("ItemCode"); 
       tbl.Columns.Add("UOM"); 
       tbl.Columns.Add("ItemName"); 
       tbl.Columns.Add("ReturnedQuantity"); 

       DataRow dr = tbl.NewRow(); 
       dr["ItemID"] = ItemID; 
       dr["ItemCode"] = itemcode; 
       dr["UOM"] = UOM; 
       dr["ItemName"] = itemname; 
       dr["ReturnedQuantity"] = Convert.ToInt32(OrderedQuantity) - Convert.ToInt32(ReceivedQuantity); 

       tbl.Rows.Add(dr); 
       gridpurahsereturn.DataSource = tbl; 
       gridpurahsereturn.DataBind(); 
      } 
     } 
    } 


} 

回答

1

你這樣做是對每一行:你已經做了一遍又一遍後

gridpurahsereturn.DataSource = tbl; 
gridpurahsereturn.DataBind(); 

所以,最終的結果是,它會只限於最後一次。

相反,逐漸建立起自己在循環記錄集合,然後循環之後的控件綁定到該集合一次。更類似於:

// create the data source 
DataTable tbl = new DataTable(); 
tbl.Columns.Add("ItemID"); 
tbl.Columns.Add("ItemCode"); 
tbl.Columns.Add("UOM"); 
tbl.Columns.Add("ItemName"); 
tbl.Columns.Add("ReturnedQuantity"); 

// populate the data source 
foreach (GridViewRow row in griddelpur.Rows) 
{ 
    // all your other logic, then... 

    DataRow dr = tbl.NewRow(); 
    dr["ItemID"] = ItemID; 
    dr["ItemCode"] = itemcode; 
    dr["UOM"] = UOM; 
    dr["ItemName"] = itemname; 
    dr["ReturnedQuantity"] = Convert.ToInt32(OrderedQuantity) - Convert.ToInt32(ReceivedQuantity); 

    tbl.Rows.Add(dr); 
} 

// use the data source 
gridpurahsereturn.DataSource = tbl; 
gridpurahsereturn.DataBind();