2

私はグリッドビューを持っています。そのグリッドビューにはボタンが1つあり、そのボタンを選択すると、データテーブルにレコードを挿入/更新する必要があります。データテーブルに値がある場合、qty フィールドは 1 ずつ増加します。それ以外の場合、数量 1 の新しい行がデータ テーブルに挿入されます。今、このコードを書いている GridView1_RowCommand にあります。しかし、データテーブルに間違った値が表示されています。私のコードは以下に書かれています。私を助けてください。

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{

    if (e.CommandName == "datacommand")
    {

        DataTable dt = new DataTable();
        if (Session["product_id"] != null)
        {
            dt = (DataTable)Session["product_id"];
        }
        DataRow dr;
            //dt.Rows[0]["qty"] = data;
            if (dt.Rows.Count<=0)
            {


                dt.Columns.Add("product_id", typeof(Int32));
                dt.Columns.Add("qty", typeof(int));
                dt.Columns.Add("price", typeof(double));
                dt.Columns.Add("total", typeof(double));





            dr = dt.NewRow();
            dr["product_id"] = e.CommandArgument;
            dr["qty"] = 1;
            dr["price"] = Convert.ToDouble(GridView1.Rows[0].Cells[3].Text);
            dr["total"] = Convert.ToInt32(dr["qty"]) * Convert.ToDouble(dr["price"]);


            dt.Rows.Add(dr);
            dt.AcceptChanges();
            Session["product_id"] = dt;
            Response.Write("<script type='javacript'> One time</script>");
            }
            else
            {
               //dt = Session["product_id"];
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    if (dt.Rows[i]["product_id"].ToString() == e.CommandArgument)
                    {
                        dr = dt.NewRow();
                        dt.Rows[i]["qty"] = Convert.ToInt32(dt.Rows[i]["qty"])+ 1;
                        dt.Rows[i]["total"] = Convert.ToInt32(dt.Rows[i]["qty"]) * Convert.ToDouble(dt.Rows[i]["price"]);

                        Session["product_id"] = dt;
                        dt.AcceptChanges();
                        Response.Write(dt);

                    }
             }
                dr = dt.NewRow();
                dr["product_id"] = e.CommandArgument;
                dr["qty"] = 1;
                dr["price"] = Convert.ToDouble(GridView1.Rows[0].Cells[3].Text);
                dr["total"] = Convert.ToInt32(dr["qty"]) * Convert.ToDouble(dr["price"]);


                dt.Rows.Add(dr);
                dt.AcceptChanges();
                Session["product_id"] = dt;

        }
        //GridViewRow row=    e.CommandArgument
        ////DataColumn prodid = new DataColumn("product_id", typeof(System.Int32));
        ////dt.Columns.Add(prodid);
        ////DataColumn qty = new DataColumn("qty", typeof(System.Int32));
        ////dt.Columns.Add(qty);
        //int index = Convert.ToInt32(e.CommandArgument);
        //GridViewRow row = GridView1.Rows[index];

        //AddShopCart(row.Cells[1].Text.ToString());
    }

}
4

2 に答える 2

1
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "datacommand")
    {

        DataTable dt = new DataTable();
        if (Session["product_id"] != null)
        {
            dt = (DataTable)Session["product_id"];
        }
        DataRow dr;

        if (dt.Rows.Count<=0)
        {
            dt.Columns.Add("product_id", typeof(Int32));
            dt.Columns.Add("qty", typeof(int));
            dt.Columns.Add("price", typeof(double));
            dt.Columns.Add("total", typeof(double));
            dr = dt.NewRow();
            dr["product_id"] = e.CommandArgument;
            dr["qty"] = 1;
            dr["price"] = Convert.ToDouble(GridView1.Rows[0].Cells[3].Text);
            dr["total"] = Convert.ToInt32(dr["qty"]) * Convert.ToDouble(dr["price"]);
            dt.Rows.Add(dr);
            dt.AcceptChanges();
            Session["product_id"] = dt;
            Response.Write("<script type='javacript'> One time</script>");
        }
        else
        {

            string aa="new";
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (dt.Rows[i]["product_id"].ToString() == e.CommandArgument)
                {
                     aa="dup";

                }
           }
            if(aa=="dup")
            {
                 for (int j = 0; j < dt.Rows.Count; j++)
                {
                    if (dt.Rows[j]["product_id"].ToString() == e.CommandArgument)
                    {
                        // aa="dup";
                        dt.Rows[j]["qty"]=Convert.ToString( Convert.ToInt32( dt.Rows[j]["qty"])+1);
                        dt.AcceptChanges();
                    }
                }
                Session["product_id"]=dt;
            }
            else
            {
            dt.Columns.Add("product_id", typeof(Int32));
            dt.Columns.Add("qty", typeof(int));
            dt.Columns.Add("price", typeof(double));
            dt.Columns.Add("total", typeof(double));

            DataRow dr1=dt.NewRow() ;
            dr1["product_id"] = e.CommandArgument;
            dr1["qty"] = 1;
            dr1["price"] = Convert.ToDouble(GridView1.Rows[0].Cells[3].Text);
            dr1["total"] = Convert.ToInt32(dr["qty"]) * Convert.ToDouble(dr["price"]);
            dt.Rows.Add(dr);
            dt.AcceptChanges();
            Session["product_id"] = dt;
        }
     }
  }
}

これが答えです

于 2013-09-30T07:10:58.460 に答える
-1

最初にプロパティのクラスを作成します。これを変更してから使用できます。

public class myclass
{
    public int product_id { get; set; }

    public int qty { get; set; }

    public double price { get; set; }

    public double total { get; set; }

}

GridView1_RowCommandその後、イベント内にコードを追加できます。

private List<myclass> productDetails = new List<myclass>();
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
        if (e.CommandName == "datacommand")
        {
            int productId = Convert.ToInt32(e.CommandArgument.ToString());

                bool isexist = productDetails.Any(p => p.product_id == productId);
                if (isexist)
                {
                    myclass product = productDetails.Where(p => p.product_id == productId).FirstOrDefault();
                    productDetails.Add(new myclass
                    {
                        product_id = product.product_id,
                        price = product.price,
                        qty = product.qty + 1,
                        total = Convert.ToDouble((product.price) * (product.qty + 1))
                    });
                }
                else
                {
                    double productPrice = Convert.ToDouble(GridView1.Rows[0].Cells[3].Text);
                    double productTotal = productPrice * 1;
                    productDetails.Add(new myclass
                    {
                        product_id = Convert.ToInt32(e.CommandArgument.ToString()),
                        price = productPrice,
                        qty = 1,
                        total = productTotal
                    });
                }

        }
}
于 2013-09-30T06:53:25.607 に答える