[ASP.NET/C#/Gentle.NET] van SqlBuilder query naar Repeater

Pagina: 1
Acties:

  • mindcrash
  • Registratie: April 2002
  • Laatst online: 22-11-2019

mindcrash

Rebellious Monkey

Topicstarter
Ik heb al op Google gezocht, een hoop geprutst en volgens de docs die bij het Gentle framework zitten zou alles goed moeten zijn, maar toch gaat er iets fout in de volgende situatie. Misschien dat iemand anders een intelligente oplossing weet want ik zie het zo 1-2-3 niet meer :'(

Het probleem is als volgt:

Ik gebruik Gentle voor O/R mapping vanaf de database access laag in mijn asp.net applicatie naar een database. Het object ziet er als volgt uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
using System;
using System.Collections;
using Gentle.Framework;
using Gentle.Provider;

namespace Core.DataObjects
{
    [TableName("tblAdvertentie")]   
    public class Advertentie
    {
        // vars
        
        private int _AdvertentieID;
        private int _AdverteerderID;
        private DateTime _StartDatum;
        private DateTime _EindDatum;
        private string _AdvertentieTitel;
        private string _AdvertentieTekst;
        private int _CategorieID;
        private int _PlaatsID;

        // constructor
        
        public Advertentie(int AdvertentieID, 
                           int AdverteerderID,
                           DateTime StartDatum,
                           DateTime EindDatum,
                           string AdvertentieTitel,
                           string AdvertentieTekst,
                           int CategorieID,
                           int PlaatsID)
        {
            this._AdvertentieID = AdvertentieID;
            this._AdverteerderID = AdverteerderID;
            this._StartDatum = StartDatum;
            this._EindDatum = EindDatum;
            this._AdvertentieTitel = AdvertentieTitel;
            this._AdvertentieTekst = AdvertentieTekst;
            this._CategorieID = CategorieID;
            this._PlaatsID = PlaatsID;
        }

        // get/setters for properties
        [TableColumn("AdvertentieID"),PrimaryKey(AutoGenerated=true)]
        int AdvertentieID
        {
            get { return _AdvertentieID; }
            set { _AdvertentieID = value; }
        }

        [TableColumn("AdverteerderID")]
        int AdverteerderID
        {
            get { return _AdverteerderID; }
            set { _AdverteerderID = value; }
        }

        [TableColumn("StartDatum")]
        DateTime StartDatum
        {
            get { return _StartDatum; }
            set { _StartDatum = value; }
        }

        [TableColumn("EindDatum")]
        DateTime EindDatum
        {
            get { return _EindDatum; }
            set { _EindDatum = value; }
        }

        [TableColumn("AdvertentieTitel")]
        string AdvertentieTitel
        {
            get{ return _AdvertentieTitel; }
            set{ _AdvertentieTitel = value; }
        }

        [TableColumn("AdvertentieTekst")]
        string AdvertentieTekst
        {
            get{ return _AdvertentieTekst; }
            set{ _AdvertentieTekst = value; }
        }

        [TableColumn("CategorieID")]
        int CategorieID
        {
            get{ return _CategorieID; }
            set{ _CategorieID = value; }
        }

        [TableColumn("PlaatsID")]
        int PlaatsID
        {
            get{ return _PlaatsID; }
            set{ _PlaatsID = value; }
        }

        // public methods

        static public IList ListCurrentAds(int PlaatsID, int CategorieID, string Datum)
        {
            
            SqlBuilder sb = new SqlBuilder(StatementType.Select,typeof(Advertentie));
            sb.AddConstraint(Operator.Equals,"PlaatsID",PlaatsID);
            sb.AddConstraint(Operator.Equals,"CategorieID",CategorieID);
            // sb.AddConstraint(Operator.GreaterThanOrEquals,"StartDatum",Datum);
            //sb.AddConstraint(Operator.LessThanOrEquals,"EindDatum",Datum);
            SqlStatement sql = sb.GetStatement(StatementType.Select, typeof(Advertentie), true);
            return ObjectFactory.GetCollection(typeof(Advertentie),sql.Execute());
        }
    }
}


Zoals je ziet ben ik bezig met het debuggen van de functie ListCurrentAds, deze doet namelijk niet echt wat ik wil ;)

Het is de bedoeling dat het resultaat van de query (welke door Gentle wordt getransformeerd in een lijst objecten) in ListCurrentAds in een Repeater control wordt afgebeeld. Nu lukt het databinden wel, ik zie keurig 2 list items staan op de webpagina en er staan 2 records die aan de query voldoen in de database, maar ik krijg op geen enkele wijze voor elkaar om de daadwerkelijke content van de object(en) in de repeater af te beelden. Als ik dit bijvoorbeeld doe in mijn usercontrol:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<%@ Import Namespace="Core.DataObjects" %>
<script runat="server" language="c#">

public int City;
public int Category;


private void Page_Load()
{
    offers.DataSource = Advertentie.ListCurrentAds(City,Category,"1-1-2004");   
    offers.DataBind();  

    debug.Text = Category.ToString();
}
</script>
<asp:Label id="debug" runat="server" />
<div style="text-align: left; background: #fff; width: 250px; padding-top: 5px; padding-bottom: 5px;">
<asp:Repeater id="offers" runat="server">
<HeaderTemplate>
<ul>
</HeaderTemplate>

<ItemTemplate>
<li><a href="OfferDetails.aspx?AdID=x"><%# DataBinder.Eval(Container.DataItem, "AdvertentieTitel") %></a></li>
</ItemTemplate>

<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
</div>


dan krijg ik van asp.net doodleuk een foutmelding dat de property in kwestie (hier AdvertentieTitel dus) van het object niet kan worden gevonden - weird omdat deze volgens de code van het object toch echt wel bestaat! (en ja, ook hier ben ik aan het debuggen zoals je ziet ;) )

Heeft er iemand enig idee hoe ik deze properties wél weergegeven krijg?

"The people who are crazy enough to think they could change the world, are the ones who do." -- Steve Jobs (1955-2011) , Aaron Swartz (1986-2013)


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Erm, wellicht moet je wat casten :) DataItem is nu niet echt van het type 'Advertentie' :)

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • mindcrash
  • Registratie: April 2002
  • Laatst online: 22-11-2019

mindcrash

Rebellious Monkey

Topicstarter
EfBe schreef op 25 augustus 2004 @ 17:00:
Erm, wellicht moet je wat casten :) DataItem is nu niet echt van het type 'Advertentie' :)
Ook dan krijg ik de volgende mededeling terug:
DataBinder.Eval: 'Core.DataObjects.Advertentie' does not contain a property with the name AdvertentieTitel.
<EDIT>
Laat maar, ik heb het al gevonden... zag even over het hoofd dat ik die properties niet public had gemaakt... 8)7

Vandaar dat ze dus niet gevonden kunnen worden :z

Goede tip: ga niet aan programma's knutselen als je niet helemaal wakker meer bent :X
</EDIT>

[ Voor 40% gewijzigd door mindcrash op 25-08-2004 17:39 ]

"The people who are crazy enough to think they could change the world, are the ones who do." -- Steve Jobs (1955-2011) , Aaron Swartz (1986-2013)


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Heh, nou je het zegt, volledig overheen gekeken ;)

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • whoami
  • Registratie: December 2000
  • Laatst online: 09:01
Hmm, daar had ik ook helemaal overheen gekeken.
Ik had even vlug gekeken of je wel getters en setters had in die properties, maar ik had helemaal niet naar de access modifiers gekeken (die je niet gespecifieerd hebt, en die dus default private zijn).

Eigenlijk vind ik het helemaal geen goed idee om geen access modifiers te specifieren als je de default access modifier wilt. Ik vind het beter om het alsnog expliciet te specifieren.

https://fgheysels.github.io/