2013-03-10 61 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