login  Naam:   Wachtwoord: 
Registreer je!
 Forum

DropDownList in repeater voor het aanpassen van hoeveelheid van product (Opgelost)

Offline Martijn2008 - 24/07/2011 17:12 (laatste wijziging 24/07/2011 17:39)
Avatar van Martijn2008PHP beginner Hallo allemaal,

Momenteel ben ik bezig een webshop te bouwen in ASP.net. De repeater control wordt gebruikt voor het tonen van de inhoud van het winkelwagentje. Door middel van deze repeater control wordt de hoeveelheid van het product text-based getoond. De hoeveelheid is niet aanpasbaar.

Graag zou ik de hoeveelheid aanpasbaar willen maken binnen de repeater control.

De volgende functionaliteit zou ik graag willen realiseren:
1.) Vanuit de code DropDownList vullen in de repeater
2.) Door de bezoeker geselecteerde hoeveelheid als default waarde geven
3.) Opslaan van wijzigingen indien de bezoeker deze maakt.

Echter heb ik geen idee hoe ik dat moet.

Dank alvast voor jullie reactie!

Martijn

4 antwoorden

Gesponsorde links
Offline Abbas - 25/07/2011 17:31 (laatste wijziging 25/07/2011 18:34)
Avatar van Abbas Gouden medaille

Crew .NET
Ik heb even een testprojectje aangemaakt om je situatie een beetje te simuleren. Volgende code zorgt ervoor dat er in de repeater voor elk item in de winkelwagen een DropDownList komt met een keuze voor de aantallen (in dit voorbeeld 1-4). De waarde van de DropDownList staat op de waarde die meegegeven is (SelectedValue).

  1. <asp:Repeater runat="server" ID="ItemsRepeater" OnItemCreated="ItemCreated" >
  2. <HeaderTemplate>
  3. Naam Prijs Aantal<br />
  4. </HeaderTemplate>
  5. <ItemTemplate>
  6. <%# DataBinder.Eval(((CartItem)Container.DataItem).Item, "Name")%> -
  7. <%# DataBinder.Eval(((CartItem)Container.DataItem).Item, "Price")%> -
  8. <asp:DropDownList ID="CountDropDown" runat="server" AutoPostBack="true" SelectedValue='<%# DataBinder.Eval(Container.DataItem, "Count")%>'>
  9. <asp:ListItem>1</asp:ListItem>
  10. <asp:ListItem>2</asp:ListItem>
  11. <asp:ListItem>3</asp:ListItem>
  12. <asp:ListItem>4</asp:ListItem>
  13. </asp:DropDownList>
  14. <br />
  15. </ItemTemplate>
  16. </asp:Repeater>

Hieronder staat de C# code van mijn voorbeeld om de Repeater te vullen:

  1. public partial class Default : Page
  2. {
  3. //Dit is maar een testklasse met dummy-data om in de Repeater te stoppen
  4. private readonly List<CartItem> _list = new List<CartItem>
  5. {
  6. new CartItem { Item = ContentFactory.ItemOne1, Count = 2},
  7. new CartItem { Item = ContentFactory.ItemOne2, Count = 1},
  8. new CartItem { Item = ContentFactory.ItemTwo1, Count = 3},
  9. new CartItem { Item = ContentFactory.ItemTwo2, Count = 2}
  10. };
  11.  
  12. protected void Page_Load(object sender, EventArgs e)
  13. {
  14. ItemsRepeater.DataSource = _list;
  15. ItemsRepeater.DataBind();
  16. }
  17. }

Hiermee zijn dus je eerste twee probleempjes opgelost:
- er staat een DropDownList om het aantal te wijzigen
- de geselecteerde waarde is de waarde van het aantal voor het item

Enkel naar puntje drie moet ik nog eens kijken. Hopelijk kan je hier al verder mee! 

Edit:
Ik heb het derde probleempje ook opgelost. De code ziet er een beetje anders uit nu, dus hieronder is de volledige code (ASP.NET en C#) om alles te laten werken:

.aspx
  1. <asp:Repeater runat="server" ID="ItemsRepeater">
  2. <HeaderTemplate>
  3. Naam Prijs Aantal<br />
  4. </HeaderTemplate>
  5. <ItemTemplate>
  6. <asp:Label ID="NameLabel" runat="server" Text='<%# DataBinder.Eval(((CartItem)Container.DataItem).Item, "Name")%>' /> -
  7. <asp:Label ID="PriceLabel" runat="server" Text='<%# DataBinder.Eval(((CartItem)Container.DataItem).Item, "Price")%>' /> -
  8. <asp:DropDownList ID="CountDropDown" runat="server" AutoPostBack="true" SelectedValue='<%# DataBinder.Eval(Container.DataItem, "Count")%>' OnSelectedIndexChanged="DdListSelectedIndexChanged">
  9. <asp:ListItem>1</asp:ListItem>
  10. <asp:ListItem>2</asp:ListItem>
  11. <asp:ListItem>3</asp:ListItem>
  12. <asp:ListItem>4</asp:ListItem>
  13. </asp:DropDownList>
  14. <br />
  15. </ItemTemplate>
  16. </asp:Repeater>

.cs
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Web.UI;
  4. using System.Web.UI.WebControls;
  5. using DropDownRepeater.Code;
  6.  
  7. namespace DropDownRepeater
  8. {
  9. public partial class Default : Page
  10. {
  11. private readonly List<CartItem> _list = new List<CartItem>
  12. {
  13. new CartItem { Item = ContentFactory.ItemOne1, Count = 2},
  14. new CartItem { Item = ContentFactory.ItemOne2, Count = 1},
  15. new CartItem { Item = ContentFactory.ItemTwo1, Count = 3},
  16. new CartItem { Item = ContentFactory.ItemTwo2, Count = 2}
  17. };
  18.  
  19. protected void Page_Init(object sender, EventArgs e)
  20. {
  21. ItemsRepeater.DataSource = _list;
  22. ItemsRepeater.ItemDataBound += RepeaterItemDataBound;
  23. ItemsRepeater.DataBind();
  24. }
  25.  
  26. protected void RepeaterItemDataBound(object sender, RepeaterItemEventArgs e)
  27. {
  28. if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
  29. {
  30. var countList = e.Item.FindControl("CountDropDown") as DropDownList;
  31. if ((countList != null))
  32. countList.SelectedIndexChanged += DdListSelectedIndexChanged;
  33. }
  34. }
  35.  
  36. protected void DdListSelectedIndexChanged(object sender, EventArgs e)
  37. {
  38. var ddList = sender as DropDownList;
  39. var rItem = ddList.Parent as RepeaterItem;
  40. var itemLabel = rItem.FindControl("NameLabel") as Label;
  41. var itemName = itemLabel.Text;
  42.  
  43. var shopListItem = _list.Find(i => i.Item.Name.Equals(itemName));
  44. shopListItem.Count = Convert.ToInt32(ddList.SelectedValue);
  45. }
  46. }
  47. }

Enkel moet je in het SelectedIndexChanged event de gewijzigde waarde dan ook doorsturen naar je cookie / database / ...

Zo, ik hoop dat dit de oplossing is die je zoekt! 
Bedankt door: Martijn2008
Offline Martijn2008 - 26/07/2011 18:29
Avatar van Martijn2008 PHP beginner Haha, je zou dit winkelwagentje bijna als tutorial kunnen toevoegen. Heb enkel een probleem bij het editten van de hoeveelheid in de dropdownlist binnen de repeater control. Ik heb breakpoints gebruikt om te controleren of er in het OnSelectedIndexChanged event wordt gesprongen, maar dat gebeurt dus niet.
Offline Abbas - 26/07/2011 20:21
Avatar van Abbas Gouden medaille

Crew .NET
Hm raar, ik had in het begin hier ook problemen mee. Maar ik heb in de aspx pagina in de DropDownList de nodige code gezet voor het event en omdat dit niet direct werkte heb ik via code in het ItemDataBound event nog eens expliciet aan elke DropDownList die wordt aangemaakt het DropDown event gebonden. Hier is anders de link naar het testprojectje: klik.
Bedankt door: Martijn2008
Offline Martijn2008 - 26/07/2011 22:47
Avatar van Martijn2008 PHP beginner Geniaal, het werkt:D!
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.192s