2

私はオンライン注文システムをやっています。アイテムがグリッドビューに存在するかどうかを確認して、別の行が追加されたり、複数の行が表示されたりしないようにします(数量と価格が更新されます)。グリッドビューはdgvOrder.Rows[i].Cells [2] .Textを使用して更新していますが、私の問題はデータテーブルを更新する方法です。

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つの数量のみが渡されています。

誰かがこの問題で私を助けることができますか?

4

1 に答える 1

0

DataSource問題は、の場合にGridViewのみをリロードすることです!isExist。それ以外の場合は、データテーブルを変更しますが、データテーブルを再度割り当てることはないGridViewため、値はから取得されViewStateます。

したがって、これは機能するはずです。

// update the table
// ...
if (!isExist)
{
    // ...
}
// reassign the updated DataTable and DataBind the grid always
dgvOrder.DataSource = dt;
dgvOrder.DataBind();
于 2013-03-10T10:11:36.630 に答える