18. december 2006 - 23:51
Der er
16 kommentarer og 1 løsning
Hvad går galt? Hashtable
Hvad pokker går galt her? Jeg skal vise en arraylist, der indeholder en ordrelinie med varenr, varenavn mm. Jeg gemmer dem så i en hashtable for at gemme i en arraylist, som jeg så kan binde til en repeater, men det dutter ikke rigtig. Her er lidt kode: //min hashtable ArrayList NyKurv = new ArrayList(); Hashtable TempKurv; TempKurv = new Hashtable(); TempKurv.Add("VareNr", vareid); TempKurv.Add("VareAntal", strAntal); TempKurv.Add("VareEnhed", strEnhed); TempKurv.Add("VareNavn", strEnhed); TempKurv.Add("VarePris", strPris); NyKurv.Add(TempKurv); //session der indeholder arraylisten Session["Ikurv"]=NyKurv; //nu skal den så bindes til repeateren ArrayList Kurv =(ArrayList)Session["IKurv"]; vareliste.DataSource=Kurv; vareliste.DataBind(); og min repeater asp:Repeater id="vareliste" runat="server"> <ItemTemplate><tr> <td><%# DataBinder.Eval(Container.DataItem,"VareNr") %></td> <td><%#DataBinder.Eval(Container.DataItem,"VareAntal") %></td> <td><%#DataBinder.Eval(Container.DataItem,"VareEnhed") %></td> <td><%#DataBinder.Eval(Container.DataItem,"VareNavn") %></td> <td><%#DataBinder.Eval(Container.DataItem,"VarePris") %></td> </tr> </ItemTemplate> </asp:Repeater> Får fejlen: DataBinding: 'System.Collections.Hashtable' does not contain a property with the name 'VareNr'. Kan i se hvad som er galt?
Annonceindlæg fra Infor
19. december 2006 - 01:29
#1
i stedet for at lade TempKurv vaere en Hashtable saa lave en klasse med private fields og public properties for de 5 slags data
20. december 2006 - 15:28
#2
Nu spørger jeg så rigtig dumt, men hvordan gør jeg så det?
21. december 2006 - 00:45
#3
Hvorfor kan det egentlig ikke lade sig gøre som jeg har gjort med en hashtable? Det er en fra et eksempel fundet via link herfra eksperten.
21. december 2006 - 01:31
#4
det kan det ogsaa men din repeater skal se noget anderledes ud men det boer laves med en egen klasse for at sikre at der er lidt type sikkerhed i koden
21. december 2006 - 01:31
#5
jeg mener en ganske almindelig fat aklasse med 5 private fields og 5 public properties
22. december 2006 - 00:50
#6
Kan godt være det ikke er den optimale løsning, men vil egentlig gerne have det til at funge med min hashtable
24. december 2006 - 22:34
#7
ok - her kommer nogle eksempler
24. december 2006 - 22:34
#8
først den rigtige
24. december 2006 - 22:34
#9
<%@ Page Language="C#" Inherits="E.Demo1" %> <html> <head> <title>Repeater demo 1</title> </head> <body> <form runat=server> <table border> <asp:Repeater id="kurv" runat="server"> <ItemTemplate> <tr> <td><%# DataBinder.Eval(Container.DataItem,"VareNr") %></td> <td><%# DataBinder.Eval(Container.DataItem,"VareNavn") %></td> <td><%# DataBinder.Eval(Container.DataItem,"VarePris") %></td> <td><%# DataBinder.Eval(Container.DataItem,"VareAntal") %></td> </tr> </ItemTemplate> </asp:Repeater> </table> </form> </body> </html>
24. december 2006 - 22:34
#10
using System; using System.Collections; using System.Web.UI; using System.Web.UI.WebControls; namespace E { public class Item { private int vareNr; private string vareNavn; private decimal varePris; private int vareAntal; public Item() : this(0, "", 0.00m, 0) { } public Item(int vareNr, string vareNavn, decimal varePris, int vareAntal) { this.vareNr = vareNr; this.vareNavn = vareNavn; this.varePris = varePris; this.vareAntal = vareAntal; } public int VareNr { get { return vareNr; } set { vareNr = value; } } public string VareNavn { get { return vareNavn; } set { vareNavn = value; } } public decimal VarePris { get { return varePris; } set { varePris = value; } } public int VareAntal { get { return vareAntal; } set { vareAntal = value; } } } public class Demo1 : Page { protected Repeater kurv; public void Page_Load(Object src, EventArgs e) { ArrayList items = new ArrayList(); items.Add(new Item(1, "A", 10.00m, 3)); items.Add(new Item(2, "BB", 20.00m, 4)); items.Add(new Item(3, "CCC", 30.00m, 5)); kurv.DataSource = items; kurv.DataBind(); } } }
24. december 2006 - 22:34
#11
så den forkerte
24. december 2006 - 22:34
#12
<%@ Page Language="C#" Inherits="E.Demo2" %> <html> <head> <title>Repeater demo 2</title> </head> <body> <form runat=server> <table border> <asp:Repeater id="kurv" runat="server"> <ItemTemplate> <tr> <td><%#((Hashtable)Container.DataItem)["VareNr"] %></td> <td><%#((Hashtable)Container.DataItem)["VareNavn"] %></td> <td><%#((Hashtable)Container.DataItem)["VarePris"] %></td> <td><%#((Hashtable)Container.DataItem)["VareAntal"] %></td> </tr> </ItemTemplate> </asp:Repeater> </table> </form> </body> </html>
24. december 2006 - 22:35
#13
using System; using System.Collections; using System.Web.UI; using System.Web.UI.WebControls; namespace E { public class Demo2 : Page { protected Repeater kurv; public void Page_Load(Object src, EventArgs e) { ArrayList items = new ArrayList(); Hashtable item1 = new Hashtable(); item1.Add("VareNr", 1); item1.Add("VareNavn", "A"); item1.Add("VarePris", 10.00m); item1.Add("VareAntal", 3); items.Add(item1); Hashtable item2 = new Hashtable(); item2.Add("VareNr", 2); item2.Add("VareNavn", "BB"); item2.Add("VarePris", 20.00m); item2.Add("VareAntal", 4); items.Add(item2); Hashtable item3 = new Hashtable(); item3.Add("VareNr", 3); item3.Add("VareNavn", "CCC"); item3.Add("VarePris", 30.00m); item3.Add("VareAntal", 5); items.Add(item3); kurv.DataSource = items; kurv.DataBind(); } } }
24. december 2006 - 22:35
#14
jeg har brugt .NET 1.1 stil
27. december 2006 - 20:22
#15
Tak skal du have, det funger fint nu, var simpelthen ved at få fnidder af at det ikke virkede. Prøver lige om jeg bare kan ændre over til den 'rigtige' metode, men er under voldsomt tidspres, så har faktisk endt med at gemme i en db, men det er jo meget langt fra en optimal løsning.
27. december 2006 - 20:43
#16
saa ligger jeg et svar
28. december 2006 - 13:08
#17
Tak skal du have :)
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.