Avatar billede gurvic Nybegynder
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?
Avatar billede arne_v Ekspert
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
Avatar billede gurvic Nybegynder
20. december 2006 - 15:28 #2
Nu spørger jeg så rigtig dumt, men hvordan gør jeg så det?
Avatar billede gurvic Nybegynder
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.
Avatar billede arne_v Ekspert
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
Avatar billede arne_v Ekspert
21. december 2006 - 01:31 #5
jeg mener en ganske almindelig fat aklasse med 5 private fields og 5 public properties
Avatar billede gurvic Nybegynder
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
Avatar billede arne_v Ekspert
24. december 2006 - 22:34 #7
ok - her kommer nogle eksempler
Avatar billede arne_v Ekspert
24. december 2006 - 22:34 #8
først den rigtige
Avatar billede arne_v Ekspert
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>
Avatar billede arne_v Ekspert
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();
        }
    }
}
Avatar billede arne_v Ekspert
24. december 2006 - 22:34 #11
så den forkerte
Avatar billede arne_v Ekspert
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>
Avatar billede arne_v Ekspert
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();
        }
    }
}
Avatar billede arne_v Ekspert
24. december 2006 - 22:35 #14
jeg har brugt .NET 1.1 stil
Avatar billede gurvic Nybegynder
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.
Avatar billede arne_v Ekspert
27. december 2006 - 20:43 #16
saa ligger jeg et svar
Avatar billede gurvic Nybegynder
28. december 2006 - 13:08 #17
Tak skal du have :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester