Ik heb een probleem met het maken van een datarelatie in asp.net. Ik heb ook andere pagina's waarin ik dit doe, deze doen het wel goed, maar om de een of andere reden doet de laatste pagina het niet goed waardoor ik me al lange tijd blind aan het staren ben op deze paar regels code.
Dit is mijn code in vb:
De stored procedure:
De grid op de pagina is redelijk standaard, alle veldjes komen er op terug en de datakeyfield is: kennisverzekering_id .
Ik wil bereiken dat ik van iedere klant alle registraties zie, en ook een totaal van alle uren die geregistreerd zijn.
De foutmelding die ik krijg is:
Een beetje veel tekst, maar ik hoop dat het duidelijk is. HOpelijk kan iemand mij in de richting wijzen want ik begin hier echt flink hoofdpijn te krijgen.
Oh ja, als ik andere velden in de laatste select van de storedprocedure zet, en de som weghaal (dus een gewone select), dan doet ie dat ook niet.
Dit is mijn code in vb:
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
| 'Set SQL Stored Procedure name...
mSqlString = "exec klantGetKennis " '<---------- Stored Proc Name
mSqlString = mSqlString & klantIdParent.Text ' ...and parameter = current parent record Id in hidden field...
ds = New DataSet
dv = New DataView
'Get connection string from Web.Config
mConnString = ConfigurationSettings.AppSettings("dbConnStr")
cn = New SqlConnection
cn.ConnectionString = mConnString
'Open connection, get data set:
cn.Open()
adap = New SqlDataAdapter(mSqlString, cn)
adap.Fill(ds, "dsMyDataKennis")
'tabel opgeven in de dataset
ds.Tables(0).TableName = "kennisverzekering"
ds.Tables(1).TableName = "medewerker"
ds.Tables(2).TableName = "kennisverzekering_registratie"
'kolom defineren voor relaties
dc1 = ds.Tables("kennisverzekering").Columns("kennisverzekering_id")
dc2 = ds.Tables("medewerker").Columns("kennisverzekering_registratie_kennisverzekering_id")
dc3 = ds.Tables("kennisverzekering_registratie").Columns("kennisverzekering_registratie_kennisverzekering_id")
'create the relations for the data: Relation Parent => Child - kennis => registratie
dr1 = New DataRelation("kennisRegistratie", dc1, dc2, False)
dr2 = New DataRelation("kennisUren", dc1, dc3, False)
ds.Relations.Add(dr1)
ds.Relations.Add(dr2)
dv = ds.Tables("kennisverzekering").DefaultView
If Not cn Is Nothing Then cn.Close()
hgKennis.DataSource = dv
hgKennis.DataBind() |
De stored procedure:
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
| CREATE PROCEDURE [florens].[klantGetKennis ]
@KlantIdIn int
AS
/* haal kennisgegevens */
Select
kennis.kennisverzekering_id ,
kennis.kennisverzekering_naam ,
kennis.kennisverzekering_begin_datum,
kennis.kennisverzekering_eind_datum ,
kennis.kennisverzekering_contracturen,
kennis.kennisverzekering_uurtarief
From
kennisverzekering as kennis
Where
kennis.kennisverzekering_klant_id = @KlantIdIn
/* haal registratie en medewerkers. Deze kunnen dan in de ADO dataset een relatie krijgen ,*/
Select
reg.kennisverzekering_registratie_id ,
reg.kennisverzekering_registratie_kennisverzekering_id,
reg.kennisverzekering_registratie_datum ,
reg.kennisverzekering_registratie_uren ,
reg.kennisverzekering_registratie_omschrijving,
reg.kennisverzekering_registratie_onsite ,
medewerker.medewerker_naam
From
kennisverzekering_registratie as reg
Inner join
kennisverzekering on reg.kennisverzekering_registratie_kennisverzekering_id = kennisverzekering.kennisverzekering_id
Inner join
medewerker on reg.kennisverzekering_registratie_medewerker_id = medewerker.medewerker_id
/* haal het totaal van de uren */
Select
sum(registratie.kennisverzekering_registratie_uren) as som_uren,
registratie.kennisverzekering_registratie_kennisverzekering_id
From
kennisverzekering_registratie as registratie
Group by
registratie.kennisverzekering_registratie_kennisverzekering_id
GO |
De grid op de pagina is redelijk standaard, alle veldjes komen er op terug en de datakeyfield is: kennisverzekering_id .
Ik wil bereiken dat ik van iedere klant alle registraties zie, en ook een totaal van alle uren die geregistreerd zijn.
De foutmelding die ik krijg is:
field or property with the name 'som_uren' was not found on the selected datasource. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.Web.HttpException: A field or property with the name 'som_uren' was not found on the selected datasource. Source Error: Line 139: Line 140: hgKennis.DataSource = dv Line 141: hgKennis.DataBind() Line 142: MyGridDataGetKennis = True Line 143: End Function Source File: bla\grids\kennisverzekering.ascx.vb Line: 141 Stack Trace: [HttpException (0x80004005): A field or property with the name 'som_uren' was not found on the selected datasource.] System.Web.UI.WebControls.BoundColumn.OnDataBindColumn(Object sender, EventArgs e) +349 System.Web.UI.Control.OnDataBinding(EventArgs e) +66 System.Web.UI.Control.DataBind() +26 System.Web.UI.Control.DataBind() +86 System.Web.UI.WebControls.DataGrid.CreateItem(Int32 itemIndex, Int32 dataSourceIndex, ListItemType itemType, Boolean dataBind, Object dataItem, DataGridColumn[] columns, TableRowCollection rows, PagedDataSource pagedDataSource) +169 System.Web.UI.WebControls.DataGrid.CreateControlHierarchy(Boolean useDataSource) +1408 System.Web.UI.WebControls.BaseDataList.OnDataBinding(EventArgs e) +49 System.Web.UI.WebControls.BaseDataList.DataBind() +23 backoffice.kennisverzekering.MyGridDataGetKennis() in bla\grids\kennisverzekering.ascx.vb:141 backoffice.kennisverzekering.Page_Load(Object sender, EventArgs e) in bla\grids\kennisverzekering.ascx.vb:32 System.Web.UI.Control.OnLoad(EventArgs e) +67 System.Web.UI.Control.LoadRecursive() +35 System.Web.UI.Control.AddedControl(Control control, Int32 index) +307 System.Web.UI.ControlCollection.Add(Control child) +153 backoffice.navbar.setPlaceHolder(String keuze) in bla\gui\navbar.ascx.vb:145 backoffice.navbar.onButtonClick(Object sender, EventArgs e) in bla\gui\navbar.ascx.vb:212 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33 System.Web.UI.Page.ProcessRequestMain() +1277
Een beetje veel tekst, maar ik hoop dat het duidelijk is. HOpelijk kan iemand mij in de richting wijzen want ik begin hier echt flink hoofdpijn te krijgen.
Oh ja, als ik andere velden in de laatste select van de storedprocedure zet, en de som weghaal (dus een gewone select), dan doet ie dat ook niet.