2013-03-10 65 views
2

我正在做一個在線訂購系統。我想檢查該項目是否存在於gridview中,因此它不會添加另一行或多行(它會更新數量和價格)。 gridview正在更新使用dgvOrder.Rows [i] .Cells [2] .Text但我的問題是如何更新數據表。如何在gridview中添加和更新行asp.net

bool isExist = false; 
if (Session["dtInSession"] != null) 
dt = (DataTable)Session["dtInSession"]; //Getting datatable from session 
for (int i = 0; i < dgvOrder.Rows.Count; i++) 
{ 
    if (dgvOrder.Rows[i].Cells[0].Text == b.ID) 
    { 
     isExist = true; 
     dgvOrder.Rows[i].Cells[2].Text = Convert.ToString(Convert.ToInt32(dgvOrder.Rows[i].Cells[2].Text) + 1); 
     dgvOrder.Rows[i].Cells[3].Text = Convert.ToString(Convert.ToInt32(dgvOrder.Rows[i].Cells[2].Text) * price); 

    } 
} 

if (!isExist) 
{ 
    DataRow dr = dt.NewRow(); 
    dr["pCode"] = b.ID; 
    dr["desc"] = description; 
    dr["qty"] = "1"; 
    dr["price"] = price; 
    dt.Rows.Add(dr); 
    dgvOrder.DataSource = dt; 
    dgvOrder.DataBind(); 
    } 

因爲我打算使用會話變量傳遞數據表。

Session["orders"] = dt; 
Response.Redirect("FinalizeOrder.aspx"); 

傳遞數據後,代碼正在工作,但每個項目只傳遞1個數量。

任何人都可以幫助我解決這個問題嗎?

+0

所以'isExist'是越來越設置爲true,但它不是遞增的數量?它顯示爲在網格中增加了嗎? – 2013-03-10 10:08:52

+0

桌子有多大?除非它很小,否則我認爲這不是最好的主意。 – Gorgsenegger 2013-03-10 10:15:12

+0

isExist的目的是檢查項目是否在gridview中。 gridview正在更新,但數據表不更新。 – MMakati 2013-03-14 16:06:31

回答

0

問題是,只有在!isExist的情況下,您纔會重新加載GridViewDataSource。否則,您正在更改數據表,但您不會再將其分配給GridView,因此這些值來自ViewState

所以這應該工作:

// update the table 
// ... 
if (!isExist) 
{ 
    // ... 
} 
// reassign the updated DataTable and DataBind the grid always 
dgvOrder.DataSource = dt; 
dgvOrder.DataBind(); 
+0

我嘗試過,但仍然無法正常工作。 – MMakati 2013-03-14 16:08:04

相關問題