Avatar billede extremecode Nybegynder
29. september 2004 - 22:48 Der er 21 kommentarer og
1 løsning

Repeater med objekter

Hej ville høre hvordan man bruger en repeater til objekter

Har et objekt der hedder bil

i classen bil ligger der de respektive get og set metoder

eks.

        public Bil(string name, string model)
        {
            this.name=name;
            this.model=model;
        }
        public string Name
        {
            get{return name;}
            set{this.name=value;}

        }
        public string Model
        {
            get{return model;}
            set{this.model=value;}

        }

nu gemmer jeg så data i mit array

  ArrayListe BilListe = New ArrayList();
  BilListe.Add(new Bil("Audi","TT"))
  BilListe.Add(new Bil("VW","Golf"));
  BilListe.Add(new Bil("Toyota","Supra"));
  BilListe.TrimToSize();

  bilTable.DataSource = BilListe;
  bilTable.DataBind();

nu vil jeg så have det ud i min repeater

<asp:Repeater id="bilTable" runat="server">
<HeaderTemplate></HeaderTemplate>
<ItemTemplate><div>
<%#Container.DataItem%>
</div></ItemTemplate>
<FooterTemplate></FooterTemplate>
</asp:Repeater>

Det virke med at jeg kan se jeg få en stak objekter returneret, men hvordan får jeg navn og model nummer ud fra DataItem????
Avatar billede arne_v Ekspert
29. september 2004 - 22:54 #1
Prøv at erstat:

<%#Container.DataItem%>

med:

<%# ((DinKlasse)((DictionaryEntry)Container.DataItem).Value).DinProperty %> :
Avatar billede extremecode Nybegynder
29. september 2004 - 23:01 #2
<%#((Bil)((DictionaryEntry)Container.DataItem).Value).Name%>

giver følgende fejl:

Compiler Error Message: CS0117: 'System.Text.RegularExpressions.Bil' does not contain a definition for 'Name'
Avatar billede extremecode Nybegynder
29. september 2004 - 23:05 #3
Vil lige nævne at jeg har adskilt html og selve koden...sådan at classen Bil ligger i en fil får sig..(Hvis det har noget betydning)..der er dog oprette en reference til classen
Avatar billede arne_v Ekspert
29. september 2004 - 23:06 #4
Den siger at klassen System.Text.RegularExpressions.Bil ikke har Name !

Du har vel ikke lagt din Bil klasse i namespace System.Text.RegularExpressions ??
Avatar billede extremecode Nybegynder
29. september 2004 - 23:11 #5
nej både Bil.cs og min Webform.aspx.cs ligge i samme namespace nemlig bilTester...

men selve Webform.aspx ligge i i noget namespace..

men det får den vel af vide fra:
<%@ Page language="c#" Codebehind="WebForm.aspx.cs" AutoEventWireup="false" Inherits="bilTester.WebForm" %>
Avatar billede arne_v Ekspert
29. september 2004 - 23:12 #6
Prøv:

<%#((bilTester.Bil)((DictionaryEntry)Container.DataItem).Value).Name%>
Avatar billede jepsen999 Nybegynder
29. september 2004 - 23:15 #7
eller erstat <%#Container.DataItem%>
med <%# DataBinder.Eval(Container.DataItem,"Name") %>
Avatar billede extremecode Nybegynder
29. september 2004 - 23:16 #8
ok nu brokker den sig ikke mere...formen kommer fint op og jeg taster et navn ind få at teste det...jeg trykke submit for at se resultatet i repeater og får følgende fejl:

Exception Details: System.InvalidCastException: Specified cast is not valid.

Line 22:             <ItemTemplate><div><%#((bilTester.Bil)((DictionaryEntry)Container.DataItem).Value).Name%></div></ItemTemplate>

Meget skummelt...er det fordi den bliver kastet forkert eller??
Avatar billede extremecode Nybegynder
29. september 2004 - 23:17 #9
ok Jepsen9999 det ser ud til at din metode virker uden fejl
Avatar billede jepsen999 Nybegynder
29. september 2004 - 23:18 #10
Jeg kan heller ikke se hvordan man kan caste en bil til et DictionaryEntry. Det burde vel heller ikke kunne lade sig gøre.... ?
Avatar billede arne_v Ekspert
29. september 2004 - 23:19 #11
Du mener at det skulle have været:

<%#((bilTester.Bil)Container.DataItem).Name%>

?
Avatar billede jepsen999 Nybegynder
29. september 2004 - 23:23 #12
Tjaa, hellere det. Jeg kan ikke se hvor dictionary kommer ind i billedet - bortset fra at bil-klassen kun har 2 værdier som et dictionaryentry.
Men jeg er nu heller ikke sikker på at et direkte cast virker uden DataBinder.Eval
Avatar billede extremecode Nybegynder
29. september 2004 - 23:24 #13
tusinde tak for Jeres hjælp jepsen point er dine...

lige et hurtigt spørgsmål...

den returnere kun et object selvom jeg skriver ind i formen flere gange...
er det fordi den opretter en ny Datasource hver gang jeg trykker på knappen??

        private void Button1_Click(object sender, System.EventArgs e)
        {
            Bil bilObj = new Bil(name.Text, model.Text);
            bilArray.Add(bilObj);   
            bilTable.DataSource=bilArray;
            bilTabel.DataBind();

        }
Avatar billede jepsen999 Nybegynder
29. september 2004 - 23:30 #14
Jo, du havde ret Arne, det virker uden DataBinder. Dem har jeg ellers skrevet mange af i tidens løb :(
Avatar billede jepsen999 Nybegynder
29. september 2004 - 23:32 #15
extreme:
Jeg tror ikke dit array bevarer værdierne, så det altså er det første element du indsætter i Button1_click.
Avatar billede arne_v Ekspert
29. september 2004 - 23:32 #16
Jeg tror at DictionaryEntry kom ind i billedet fordi det eksempel jeg tog det fra havde
objekterne i en Hashtable.
Avatar billede extremecode Nybegynder
29. september 2004 - 23:35 #17
hmm det vil sige at man ikke kan benytte array til noget...skulle gerne være sådan at jeg kunne tilføje en masse biler til arrayet, som jeg så kunne se ved hjælp af repeater...og når jeg så var færdig med at tilføje biler, vil jeg kunnne gemme det hele i en db f.eks...
Avatar billede jepsen999 Nybegynder
29. september 2004 - 23:40 #18
Arne: ok så giver det jo mening.

Extreme:
Den letteste måde at tilføje et nyt bilobjekt til grid'et er at hente den oprindelige datasource ind i et array og derefter kalde Add:
button1_click{
 
  ArrayList bilArray = 'hent værdierne fra DB'
  Bil bilObj = new Bil(name.Text, model.Text);
  bilArray.Add(bilObj);   
  bilTable.DataSource=bilArray;
  bilTabel.DataBind();
}
Avatar billede extremecode Nybegynder
29. september 2004 - 23:43 #19
hmmm ok...min ide var bare at man kunne lave en multiAdd..hvis du forstå altså tilføje en masse biler til array og dernæst gemme det hele...istedet for kun at gemme en bil ad gangen....

men man kan måske gemme sit array i session og på den måde bevare sit array...

nåår der er nok til et nyt spørgsmål...

du har været mere en flink jepsen....svar og du skal modtage :)
Avatar billede jepsen999 Nybegynder
29. september 2004 - 23:46 #20
Ja, at gemme værdierne i session er også en løsning.
Avatar billede extremecode Nybegynder
29. september 2004 - 23:49 #21
tak for hjælpen m8
Avatar billede extremecode Nybegynder
30. september 2004 - 00:01 #22
ahh fandt ud at at hvis man sætte sit array til public static,,, kan man oprette flere objecter i sit arrayList...meget smart
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