2015-04-03 88 views
0

這是我的代碼,用於顯示列表中的數據。它顯示數據,但也顯示重複的產品。所以,請給我建議的方式來展示產品uniquely.For例 如果我加入一個新的產品到購物車它複製產品先前添加的產品如何顯示產品列表中存儲的唯一清單產品

private List<Cart> PopulateData() 
{ 

    DataTable dt = new DataTable();  
    dt = (DataTable)Session["Test"]; 

    List<Cart> Product = new List<Cart>(); 

    if (Session["key"] == null) 
    { 

     foreach (DataRow row in dt.Rows) 
     { 
      string Quantity = Request.QueryString["Quantity"]; 

      float f_num = float.Parse(row["ProductPrice"].ToString()); 
      Cart cr = new Cart(); 
      Product.Add(new Cart { ProductName = row["ProductName"].ToString(), ProductPrice = f_num, Quantity = Convert.ToInt32(Quantity), Type = row["Type"].ToString() }); 
     } 

    } 
    else if(Session["key"]!=null) 
    { 
     Product = (List<Cart>)Session["key"]; 
     foreach (DataRow row in dt.Rows) 
     { 
      string Quantity = Request.QueryString["Quantity"]; 

      float f_num = float.Parse(row["ProductPrice"].ToString()); 
      Cart cr = new Cart(); 
      Product.Add(new Cart { ProductName = row["ProductName"].ToString(), ProductPrice = f_num, Quantity = Convert.ToInt32(Quantity), Type = row["Type"].ToString() }); 
     } 

    } 
    Session["key"] = Product; 
    return Product; 
} 
+0

找到這個網址http://stackoverflow.com/questions/1199176/how-to-select-distinct-rows-in-a-datatable-and-store-into-an-array – 2015-04-03 10:55:06

+0

@Praveen不確定的問題。你想只在會話中存儲唯一的項目? – JunaidKirkire 2015-04-03 10:55:48

+0

嗨Junaid我想在我的GridView中綁定唯一的數據。我的代碼只是複製以前添加的數據。 – Praveen 2015-04-03 10:59:11

回答

0
在其他部分

,(在那裏你從添加的數據會話),您必須檢查該行是否在會話中,然後不要將其添加到基於某個「uniqueid」的product類中。

else { 
    Product = (List<Cart>)Session["key"]; 
    foreach (DataRow row in dt.Rows) 
    { 
     string Quantity = Request.QueryString["Quantity"]; 
     var uniqueid = Convert.ToInt32(row["productId"]); 
     //Linq to find if the product list has the same item 
     bool containsItem = Product.Any(item => item.ProductId == uniqueid); 
     var uniqueid = Convert.ToInt32(row["uniqueId"]); 

     bool containsItem = Product.Any(item => item.UniqueProperty == uniqueid); 
     float f_num = float.Parse(row["ProductPrice"].ToString()); 
     Cart cr = new Cart(); 
     if(containsItem) { 
     Product.Add(new Cart { ProductName = row["ProductName"].ToString(), ProductPrice = f_num, Quantity = Convert.ToInt32(Quantity), Type = row["Type"].ToString() }); 
     } 
    } 
} 

編輯:代碼現在改變。檢查正確的產品id屬性和字段名

+0

它給出錯誤在下面一行PLZ建議如何解決錯誤----- bool containsItem = Product.Any(item => item.UniqueProperty == uniqueid); – Praveen 2015-04-03 11:20:35

+0

'UniqueProperty'是您唯一的ID(產品密鑰或其他)的名稱 uniqueid是您在記錄中的一些uniqueid 您必須根據您擁有的唯一ID構建相同的邏輯。不要只是複製粘貼代碼 – 2015-04-03 11:21:50

+0

我是新來的c#所以請根據我的代碼建議我應該採取什麼UniqueProperty – Praveen 2015-04-03 11:48:01

0

在你,你可以使用LINQ查詢

簡單重複的記錄,在該行

Session["key"] = Product; 

分配產品列表會議時您可以不喜歡它

Session["key"] = Product.GroupBy(x => new { x.Quantity, x.ProductName, x.ProductPrice }).Select(x=>x.Key).ToList(); 

或者

Session["key"] = Product.Select(x => new { Quantity = x.Quantity, ProductName=x.ProductName, ProductPrice=x.ProductPrice }).Distinct(); 
+0

我試過但它給出了錯誤。所以,請建議鋤頭克服它。 – Praveen 2015-04-04 05:28:43

+0

@ Ruchir - 無法強制轉換System.Collections.Generic.List'1 [<> f__AnonymousType0'3 [System.Int32,System.String,System.Single]]類型的對象以鍵入System.Collections.Generic 。List'1 [Cart]'----這是錯誤,它顯示PLZ幫助 – Praveen 2015-04-04 05:36:52

+0

您需要投射您的對象,如下所示: 'Session [「key」] = Product.GroupBy(x => new {x .ProductId,x.ProductName})。Select(x => new Cart {ProductId = x.Key.ProductId,ProductName = x.Key.ProductName})。ToList();' – 2015-04-06 08:23:37

相關問題