2013-09-30 4 views
1

У меня есть вид сетки и в этом виде сетки у меня есть одна кнопка, и при выборе этой кнопки мне нужно вставить/обновить запись в таблице данных. Если в таблице данных, если значение есть, тогда поле qty будет увеличиваться на единицу. В таблицу данных добавляется новая строка с qty 1. Теперь дело в GridView1_RowCommand, я пишу этот код. Но это дает мне неправильные значения в таблице данных. Мой код написан ниже. Пожалуйста, помогите мне.Создание Datatable с использованием GridView

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()); 
    } 

} 
+0

ли вы добавили поле команды редактирования, обновления и ОТМЕНА в GridView задач проектирования? –

+0

Nope ... Просто кнопка «AddtoCart» ... Для чего мне это нужно. –

+0

Если вы хотите отредактировать и обновить gridview, вам нужно добавить поле команды в задачи проектирования gridview. –

ответ

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; 
     } 
    } 
    } 
} 

так это ответ

+0

идет в цикле for в if (aa == "dup"), но условие в этом цикле не совпадает. Это не увеличивает значение qty. –

-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 
        }); 
       } 

     } 
} 
+0

Что такое детали продукта здесь ??? –

+0

создать список объектов 'private Список productDetails = новый Список ();' –

+0

У меня есть обновленный код, проверьте его. –

Смежные вопросы