2016-07-30 6 views
0

こんにちは私は、条件が満たされた場合、gridviewからデータテーブルに項目を追加しようとしています。データテーブル内の複数のレコード

条件は私が一つだけのアイテムを取って、条件データテーブルを満たした複数のアイテムを持っている場合は、問題があるReceivedQuantity < OrderedQuantity

です。

コード

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(); 
関連する問題