Op dit moment ben ik bezig met de beheerkant van een website waarbij ik voor database toegang gebruik maak van het opensource ORM framework Gentle. Tot nu toe verloopt de ontwikkeling prima maar ik loop nu toch tegen een klein probleem aan:
Ik heb 2 tabellen: Advertentie en Adverteerder. Deze hebben een 1:1 relatie met elkaar welke onstaat door het veld AdverteerderID in beide tabellen aan elkaar te koppelen. Voor beide tabellen heb ik een object gemaakt waarbij de properties gemapped worden naar de desbetreffende velden in de database.
Daarnaast bevat Advertentie een extra property Adverteerder die refereert naar de desbetreffende adverteerder in de tabel Adverteerder met het in Advertentie genoemde AdverteerderID. Om alles nog even extra te verduidelijken is dit de code van de desbetreffende objecten:
Nu ben ik op basis van een lijst (IList) met objecten van het type Advertentie een DataGrid aan het vullen, wat uitstekend gaat als ik het qua DataFields laat bij de properties behorende bij het object Advertentie. Nu wil ik hier ook een veld toevoegen met de naam van het bedrijf van de desbetreffende adverteerder, maar deze krijg ik er met geen mogelijkheid in. De error die ik terug krijg is:
System.Web.HttpException: A field or property with the name 'Advertentie.BedrijfsNaam' was not found on the selected datasource.
Heeft iemand enig idee hoe ik vanuit het DataGrid de properties van dit child object kan benaderen? Kan dit überhaupt wel direct of moet ik toch echt met het OnDataBind event gaan rotzooien?
Oh, ja voor ik het vergeet voor ik het vergeet - de code van de ASP.NET pagina zelf:
Ik heb 2 tabellen: Advertentie en Adverteerder. Deze hebben een 1:1 relatie met elkaar welke onstaat door het veld AdverteerderID in beide tabellen aan elkaar te koppelen. Voor beide tabellen heb ik een object gemaakt waarbij de properties gemapped worden naar de desbetreffende velden in de database.
Daarnaast bevat Advertentie een extra property Adverteerder die refereert naar de desbetreffende adverteerder in de tabel Adverteerder met het in Advertentie genoemde AdverteerderID. Om alles nog even extra te verduidelijken is dit de code van de desbetreffende objecten:
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
| 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;
private int _TypeID;
// constructor
public Advertentie(int AdvertentieID,
int AdverteerderID,
DateTime StartDatum,
DateTime EindDatum,
string AdvertentieTitel,
string AdvertentieTekst,
int CategorieID,
int PlaatsID,
int TypeID)
{
this._AdvertentieID = AdvertentieID;
this._AdverteerderID = AdverteerderID;
this._StartDatum = StartDatum;
this._EindDatum = EindDatum;
this._AdvertentieTitel = AdvertentieTitel;
this._AdvertentieTekst = AdvertentieTekst;
this._CategorieID = CategorieID;
this._PlaatsID = PlaatsID;
this._TypeID = TypeID;
}
// get/setters for properties
[TableColumn("AdvertentieID"),PrimaryKey(AutoGenerated=true)]
public int AdvertentieID
{
get { return _AdvertentieID; }
set { _AdvertentieID = value; }
}
[TableColumn("AdverteerderID")]
public int AdverteerderID
{
get { return _AdverteerderID; }
set { _AdverteerderID = value; }
}
[TableColumn("StartDatum")]
public DateTime StartDatum
{
get { return _StartDatum; }
set { _StartDatum = value; }
}
[TableColumn("EindDatum")]
public DateTime EindDatum
{
get { return _EindDatum; }
set { _EindDatum = value; }
}
[TableColumn("AdvertentieTitel")]
public string AdvertentieTitel
{
get{ return _AdvertentieTitel; }
set{ _AdvertentieTitel = value; }
}
[TableColumn("AdvertentieTekst")]
public string AdvertentieTekst
{
get{ return _AdvertentieTekst; }
set{ _AdvertentieTekst = value; }
}
[TableColumn("CategorieID")]
public int CategorieID
{
get{ return _CategorieID; }
set{ _CategorieID = value; }
}
[TableColumn("PlaatsID")]
public int PlaatsID
{
get{ return _PlaatsID; }
set{ _PlaatsID = value; }
}
[TableColumn("TypeID")]
public int TypeID
{
get{ return _TypeID; }
set{ _TypeID = value; }
}
public Adverteerder Adverteerder
{
get
{
Key key = new Key(typeof(Adverteerder), true, "AdverteerderID", _AdverteerderID);
return _AdverteerderID != 0 ? (Adverteerder)Broker.RetrieveInstance(typeof(Adverteerder), key) : null;
}
}
// public methods
static public IList RetrieveAds(int AdverteerderID)
{
if (AdverteerderID == 0)
{
return Broker.RetrieveList(typeof(Advertentie));
}
else
{
Key key = new Key( typeof(Advertentie), false, "AdverteerderID", AdverteerderID);
return Broker.RetrieveList(typeof(Advertentie),key);
}
}
static public Advertentie Retrieve(int AdvertentieID)
{
Key key = new Key( typeof(Advertentie), false, "AdvertentieID", AdvertentieID);
return Broker.RetrieveInstance(typeof(Advertentie),key) as Advertentie;
}
static public Advertentie RetrieveAd(int AdvertentieID)
{
SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(Advertentie));
sb.AddConstraint(Operator.Equals,"AdvertentieID",AdvertentieID);
sb.AddConstraint(Operator.LessThanOrEquals,"StartDatum",Convert.ToDateTime(DateTime.Now.ToShortDateString()));
sb.AddConstraint(Operator.GreaterThanOrEquals,"EindDatum",Convert.ToDateTime(DateTime.Now.ToShortDateString()));
SqlStatement sql = sb.GetStatement(StatementType.Select, typeof(Advertentie), true);
return (Advertentie)ObjectFactory.GetInstance(typeof(Advertentie),sql.Execute());
}
static public IList ListCurrentAds(int PlaatsID, int CategorieID)
{
SqlBuilder sb = new SqlBuilder(StatementType.Select,typeof(Advertentie));
sb.AddConstraint(Operator.Equals,"PlaatsID",PlaatsID);
sb.AddConstraint(Operator.Equals,"CategorieID",CategorieID);
sb.AddConstraint(Operator.LessThanOrEquals,"StartDatum",Convert.ToDateTime(DateTime.Now.ToShortDateString()));
sb.AddConstraint(Operator.GreaterThanOrEquals,"EindDatum",Convert.ToDateTime(DateTime.Now.ToShortDateString()));
SqlStatement sql = sb.GetStatement(StatementType.Select, typeof(Advertentie), true);
return ObjectFactory.GetCollection(typeof(Advertentie),sql.Execute());
}
}
} |
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
| using System;
using System.Collections;
using Gentle.Framework;
using Gentle.Provider;
namespace Core.DataObjects
{
[TableName("tblAdverteerder")]
public class Adverteerder: Persistent
{
// vars
private int _AdverteerderID;
private string _InlogNaam;
private string _WachtWoord;
private string _BedrijfsNaam;
private string _ContactVoorNaam;
private string _ContactVoorLetters;
private string _ContactTussenVoegsels;
private string _ContactAchterNaam;
private string _ContactGeslacht;
private string _ContactMailAdres;
private string _ContactTelefoonNummer;
private string _PostAdres;
private string _PostPostCode;
private string _PostWoonPlaats;
private string _BezoekAdres;
private string _BezoekPostCode;
private string _BezoekPlaats;
private string _MailAdres;
private string _WebSiteURL;
private string _TelefoonNummer;
private string _FaxNummer;
private int _CategorieID;
// constructor
public Adverteerder(int AdverteerderID,
string InlogNaam,
string WachtWoord,
string BedrijfsNaam,
string ContactVoorNaam,
string ContactVoorLetters,
string ContactTussenVoegsels,
string ContactAchterNaam,
string ContactGeslacht,
string ContactMailAdres,
string ContactTelefoonNummer,
string PostAdres,
string PostPostCode,
string PostWoonPlaats,
string BezoekAdres,
string BezoekPostCode,
string BezoekPlaats,
string MailAdres,
string WebSiteURL,
string TelefoonNummer,
string FaxNummer,
int CategorieID)
{
this._AdverteerderID = AdverteerderID;
this._InlogNaam = InlogNaam;
this._WachtWoord = WachtWoord;
this._BedrijfsNaam = BedrijfsNaam;
this._ContactVoorNaam = ContactVoorNaam;
this._ContactVoorLetters = ContactVoorLetters;
this._ContactTussenVoegsels = ContactTussenVoegsels;
this._ContactAchterNaam = ContactAchterNaam;
this._ContactGeslacht = ContactGeslacht;
this._ContactMailAdres = ContactMailAdres;
this._ContactTelefoonNummer = ContactTelefoonNummer;
this._PostAdres = PostAdres;
this._PostPostCode = PostPostCode;
this._PostWoonPlaats = PostWoonPlaats;
this._BezoekAdres = BezoekAdres;
this._BezoekPostCode = BezoekPostCode;
this._BezoekPlaats = BezoekPlaats;
this._MailAdres = MailAdres;
this._WebSiteURL = WebSiteURL;
this._TelefoonNummer = TelefoonNummer;
this._FaxNummer = FaxNummer;
this._CategorieID = CategorieID;
}
// get/setters for properties
[TableColumn("AdverteerderID"), PrimaryKey(AutoGenerated=true)]
public int AdverteerderID
{
get{ return _AdverteerderID; }
set{ _AdverteerderID = value; }
}
[TableColumn("InlogNaam")]
public string InlogNaam
{
get{ return _InlogNaam; }
set{ _InlogNaam = value; }
}
[TableColumn("WachtWoord")]
public string WachtWoord
{
get{ return _WachtWoord; }
set{ _WachtWoord = value; }
}
[TableColumn("BedrijfsNaam")]
public string BedrijfsNaam
{
get{ return _BedrijfsNaam; }
set{ _BedrijfsNaam = value; }
}
[TableColumn("ContactVoorNaam")]
public string ContactVoorNaam
{
get{ return _ContactVoorNaam; }
set{ _ContactVoorNaam = value; }
}
[TableColumn("ContactVoorLetters")]
public string ContactVoorLetters
{
get{ return _ContactVoorLetters; }
set{ _ContactVoorLetters = value; }
}
[TableColumn("ContactTussenVoegsels")]
public string ContactTussenVoegsels
{
get{ return _ContactTussenVoegsels; }
set{ _ContactTussenVoegsels = value; }
}
[TableColumn("ContactAchterNaam")]
public string ContactAchterNaam
{
get{ return _ContactAchterNaam; }
set{ _ContactAchterNaam = value; }
}
[TableColumn("ContactGeslacht")]
public string ContactGeslacht
{
get{ return _ContactGeslacht; }
set{ _ContactGeslacht = value; }
}
[TableColumn("ContactMailAdres")]
public string ContactMailAdres
{
get{ return _ContactMailAdres; }
set{ _ContactMailAdres = value; }
}
[TableColumn("ContactTelefoonNummer")]
public string ContactTelefoonNummer
{
get{ return _ContactTelefoonNummer; }
set{ _ContactTelefoonNummer = value; }
}
[TableColumn("PostAdres")]
public string PostAdres
{
get{ return _PostAdres; }
set{ _PostAdres = value; }
}
[TableColumn("PostPostCode")]
public string PostPostCode
{
get{ return _PostPostCode; }
set{ _PostPostCode = value; }
}
[TableColumn("PostWoonPlaats")]
public string PostWoonPlaats
{
get{ return _PostWoonPlaats; }
set{ _PostWoonPlaats = value; }
}
[TableColumn("BezoekAdres")]
public string BezoekAdres
{
get{ return _BezoekAdres; }
set{ _BezoekAdres = value; }
}
[TableColumn("BezoekPostCode")]
public string BezoekPostCode
{
get{ return _BezoekPostCode; }
set{ _BezoekPostCode = value; }
}
[TableColumn("BezoekPlaats")]
public string BezoekPlaats
{
get{ return _BezoekPlaats; }
set{ _BezoekPlaats = value; }
}
[TableColumn("MailAdres")]
public string MailAdres
{
get{ return _MailAdres; }
set{ _MailAdres = value; }
}
[TableColumn("WebSiteURL")]
public string WebSiteURL
{
get{ return _WebSiteURL; }
set{ _WebSiteURL = value; }
}
[TableColumn("TelefoonNummer")]
public string TelefoonNummer
{
get{ return _TelefoonNummer; }
set{ _TelefoonNummer = value; }
}
[TableColumn("FaxNummer")]
public string FaxNummer
{
get{ return _FaxNummer; }
set{ _FaxNummer = value; }
}
[TableColumn("CategorieID")]
public int CategorieID
{
get{ return _CategorieID; }
set{ _CategorieID = value; }
}
static public IList ListAll
{
get{ return Broker.RetrieveList(typeof(Adverteerder)); }
}
// public methods
static public Adverteerder Retrieve(int AdverteerderID)
{
Key key = new Key( typeof(Adverteerder), true, "AdverteerderID", AdverteerderID);
return Broker.RetrieveInstance( typeof(Adverteerder), key ) as Adverteerder;
}
static public Adverteerder Authenticate(string Username, string Password)
{
SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(Adverteerder));
sb.AddConstraint(Operator.Equals,"InlogNaam",Username);
sb.AddConstraint(Operator.Equals,"WachtWoord",Password);
SqlStatement sql = sb.GetStatement(StatementType.Select, typeof(Adverteerder), true);
return (Adverteerder)ObjectFactory.GetInstance(typeof(Adverteerder),sql.Execute());
}
}
} |
Nu ben ik op basis van een lijst (IList) met objecten van het type Advertentie een DataGrid aan het vullen, wat uitstekend gaat als ik het qua DataFields laat bij de properties behorende bij het object Advertentie. Nu wil ik hier ook een veld toevoegen met de naam van het bedrijf van de desbetreffende adverteerder, maar deze krijg ik er met geen mogelijkheid in. De error die ik terug krijg is:
System.Web.HttpException: A field or property with the name 'Advertentie.BedrijfsNaam' was not found on the selected datasource.
Heeft iemand enig idee hoe ik vanuit het DataGrid de properties van dit child object kan benaderen? Kan dit überhaupt wel direct of moet ik toch echt met het OnDataBind event gaan rotzooien?
Oh, ja voor ik het vergeet voor ik het vergeet - de code van de ASP.NET pagina zelf:
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
| <%@ Page Language="C#" ContentType="text/html" ResponseEncoding="iso-8859-1" debug="true" %>
<%@ Import Namespace="Core.DataObjects" %>
<%@ Register TagPrefix="Core" TagName="Navigator" Src="controls/navigator.ascx" %>
<script runat="server">
void Page_Load()
{
int AdID;
AdID = Convert.ToInt32(Request.QueryString["AdID"]);
grid.DataSource = Advertentie.RetrieveAds(AdID);
grid.DataBind();
}
</script>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>xxxx - Beheer Adverteerders</title>
<style type="text/css">
.header
{
font-weight: bold;
color: #fff;
background: #640D82;
}
.center
{
text-align: center;
}
</style>
</head>
<body style="margin: 0px; border: 0px;">
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td>[img]"../img/Logo.jpg"[/img]</td>
<td valign="top" style="background: #666666"></td>
</tr>
<tr>
<td valign="top">
<table border=0 cellspacing=0 cellpadding=0>
<tr>
<td valign="top">
<table border=0 cellpadding=0 cellspacing=0" width="166">
<tr>
<td background="../img/Nav_top.jpg" height="28"> </td>
</tr>
<tr>
<td background="../img/Nav_middle.jpg" height="140" valign="top">
<Core:Navigator runat="server" />
</td>
</tr>
<tr>
<td background="../img/Nav_bottom.jpg" height="454"> </td>
</tr>
</table>
</td>
<td background="../img/Content.jpg" width="669" height="622" valign="top">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="28" colspan="2" bgcolor="#640D82" width="669" style="color: #fff; font-family: verdana; font-weight: bold; text-align: center;">xxx Beheer v1.0</td>
</tr>
<tr>
<td style="padding: 5px; font-family: verdana; font-size: 12px;">
<form runat="server">
<asp:DataGrid Width="100 %" Border="0" CellPadding="3" AutoGenerateColumns="false" style="font-family: verdana; font-size: 12px;" ID="grid" runat="server">
<columns>
<asp:BoundColumn HeaderText="Titel Advertentie" HeaderStyle-CssClass="header" DataField="AdvertentieTitel" />
<asp:BoundColumn HeaderText="Adverteerder" HeaderStyle-CssClass="header" DataField="Adverteerder.BedrijfsNaam" />
<asp:HyperLinkColumn DataNavigateUrlField="AdverteerderID" HeaderStyle-CssClass="header" ItemStyle-CssClass = "center" DataNavigateUrlFormatString="Advertentie.aspx?id={0}" Text="Bewerk Gegevens" />
</columns>
</asp:DataGrid>
</form>
<br>
[ <a href="Advertentie.aspx?id=0">Nieuwe Advertentie</a> ]
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
<td>[img]"../img/Ads.jpg"></td>
</tr>
</table>
</body>
</table>
</body>
</html[/img] |
"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)