Avatar billede keenkbh Nybegynder
17. november 2006 - 22:43 Der er 11 kommentarer og
1 løsning

Hjælp til CodeBehind

Hej.

Jeg sidder med et lille problem. Jeg prøver at få lavet en arraylist, som skal indeholde et objekt, af typen vare, og vise skidtet i en listbox.

koden ser således ud:

vare.cs:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.IO;
using System.Configuration;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Collections;

namespace noget
{
    public class vare : Page
    {
        public string vareID;
        public double prisStk;
        public int antal;

        public vare(string vareID, double prisStk, int antal)
        {
            this.vareID = vareID;
            this.prisStk = prisStk;
            this.antal = antal;

            ListBox box1 = new ListBox();
            ArrayList varer = new ArrayList();
            varer.Add(new vare("hej", 12.5, 2));
            varer.Add(new vare("med", 12.5, 2));

            box1.DataSource = varer;
            box1.DataBind();
        }

        public string VareID
        {
            get
            {
                return vareID;
            }
            set
            {
                vareID = value;
            }
        }

        public double PrisStk
        {
            get
            {
                return prisStk;
            }
            set
            {
                prisStk = value;
            }
        }

        public int Antal
        {
            get
            {
                return antal;
            }
            set
            {
                antal = value;
            }
        }
    }
}

noget.aspx

<%@ Page Language="C#" Inherits="vare" Src="~/vare.cs"%>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ListBox ID="box1" runat="server"></asp:ListBox>
    </div>
    </form>
</body>
</html>

Når jeg ligger det her op på mit webhotel kommer den med følgende fejl:

No overload for method 'vare' takes '0' arguments.

Og nu synes jeg, at jeg har kæmpet nok med det selv, så nu beder jeg ydmygt om assistance... :)
Avatar billede arne_v Ekspert
17. november 2006 - 23:02 #1
public vare(string vareID, double prisStk, int antal)

No overload for method 'vare' takes '0' arguments

den vil gerne have en constructor uden argumenter
Avatar billede keenkbh Nybegynder
17. november 2006 - 23:06 #2
Hvis jeg fjerner det i constructoren, siger den fejl når jeg prøver at putte objecter i min Arraylist. Og objectet skal også indeholde de tre ting. Muligvis flere senere, men lige nu ville jeg bare gerne have det til at virke. :)
Avatar billede arne_v Ekspert
17. november 2006 - 23:07 #3
ioevrigt ligner din klasse mere end data klasse end en page klasse
Avatar billede keenkbh Nybegynder
17. november 2006 - 23:11 #4
okay... Hvad gør jeg så... jeg er lidt ny i alt det der codebehind sjov... synes bare at konceptet, hvis jeg ellers kunne få det til at virke, er meget smart...
Avatar billede arne_v Ekspert
18. november 2006 - 04:30 #5
du laver to klasser:

vare som nu bortset fra at den ikke arver fra page og ikke har den array list

en ny klasse som arver fra page og sum i page load laver en array list og assigner
til din listbox control
Avatar billede keenkbh Nybegynder
18. november 2006 - 10:45 #6
Nu har jeg følgende klasser:

vare.cs:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.IO;
using System.Configuration;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Collections;

namespace noget
{
    public class vare
    {
        public string vareID;
        public double prisStk;
        public int antal;

        public vare(string vareID,double prisStk,int antal)
        {
            this.vareID = vareID;
            this.prisStk = prisStk;
            this.antal = antal;
        }

        public string VareID
        {
            get
            {
                return vareID;
            }
            set
            {
                vareID = value;
            }
        }

        public double PrisStk
        {
            get
            {
                return prisStk;
            }
            set
            {
                prisStk = value;
            }
        }

        public int Antal
        {
            get
            {
                return antal;
            }
            set
            {
                antal = value;
            }
        }
    }
}

Test.cs:

using System;
using System.Collections;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Data;


namespace noget
{
    public class Test : Page
    {

        void Page_Load(object sender, EventArgs e)
        {
            ListBox box1 = new ListBox();
            ArrayList varer = new ArrayList();

            varer.Add(new vare("hej", 12, 9));
            varer.Add(new vare("med", 42, 2));
            varer.Add(new vare("dig", 61, 1));

            box1.DataSource = varer;
            box1.DataBind();
        }
    }
}

Og nu får jeg følgende fejl: The type or namespace name 'vare' could not be found. Den henviser til denne linje: varer.Add(new vare("hej", 12, 9));

Jeg har prøvet at tilføje namespace til vare, så der kommer til at stå noget.vare , men så siger den bare, at vare ikke findes i namespacet.
Avatar billede snepnet Nybegynder
18. november 2006 - 10:58 #7
Du kan lægge vare.cs filen i app_code, så skal den nok finde den.
Mvh
Avatar billede keenkbh Nybegynder
18. november 2006 - 12:25 #8
stadig samme fejl. Nu har jeg prøvet at ligge vare.cs i App_Code folder, det virkede ikke.
Så prøvede jeg at ligge både Test.cs og vare.cs ind i App_Code. Stadig samme fejl. Jeg må nok indrømme, at jeg ikke helt forstår hvorfor skidtet ikke virker.
Avatar billede snepnet Nybegynder
19. november 2006 - 10:43 #9
Først - er det asp.net 1.1 du har, eller 2.0?
Hvis det ikke er 2.0 - opgradér :o)

Og derefter:
Sørg for at binde din aspx til din kode ved i dit pagedirective at pege på kodefilen sådan her:
CodeFile="Test.aspx.cs" (din codebehind fil skal så hedde det angivne).
cs-filen lægger du bare sammen med aspx-filen.

Dernæst:
Hvis du vil refere til din vare-klasse, skal du sørge for at du kan kigge ind i det namespave du har klassen liggende i ved:
using noget;
Øverst i din test.aspx.cs fil.

Og ... Du kan jo hente Visual Web Developer, og lave dine side med det - så kommer du ikke til at have den slags problemer under udvikling.
http://msdn.microsoft.com/vstudio/express/vwd/

Mvh
Avatar billede keenkbh Nybegynder
19. november 2006 - 16:00 #10
Jeg bruger faktisk Visual Web Developer. :) Og selvfølgelig bruger jeg 2.0 :)

Og nu virker det... sådan nogenlunde i hvert fald... Nu skal jeg bare lige lave et lille datagrid i stedet for den kedelige listbox... ;-)

Men så blev jeg lidt klogere... Både arne og snepnet - læg et svar...
Avatar billede arne_v Ekspert
19. november 2006 - 16:31 #11
ok
Avatar billede arne_v Ekspert
19. november 2006 - 17:53 #12
snepnet du kan hente de 30 her http://www.eksperten.dk/spm/745797
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