Scusa, forse sono un po' lento io oggi, ma mi sembrava di capire che ottenessi un errore in cui la griglia si lamentava della mancanza della proprietà Categories e io ti ho suggerito di cambiarla con categoryName. Ora.. cosa c'entra e.Result che è null?
71 messaggi dal 06 settembre 2007
Faccio un breve riepilogo:
seguendo il consiglio di Nostromo, ho effettuato il load delle informazioni dell'entity correlata all'interno dell'evento ContextCreated del controllo LinqDataSource; ho successivamente attivato il debug sull'evento e.Result ma a quanto pare non c'è verso di caricare il datacontext e di consegunza è impossibile accedere all'oggetto Categories che è la tabella correlata di cui voglio visualizzare i valori della colonna CategoryName
Ok... però io sono convinto (e nel dubbio ho anche fatto una prova) che se tu chiedi un oggetto del tipo
new (ProductName, UnitPrice, UnitsInStock, Discontinued, Categories.CategoryName)

la proprietà che cerchi si chiama CategoryName e non Categories.CategoryName, visto che viene creato un anonymous type con una proprietà string. Tutto ciò vuol dire che, senza bisogno della include (quello magari lo vediamo dopo), nell'indicazione del binding sulla griglia IMHO dovresti mettere
Eval("CategoryName")

invece di
Eval("Categories.CategoryName")


Domanda: hai fatto questo tipo di prova?
m.
71 messaggi dal 06 settembre 2007
Il template field di CategoryName è il seguente:

<asp:TemplateField HeaderText="CategoryName" SortExpression="CategoryName">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("CategoryName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>

ho effettuato la prova ed il risultato è:

InvalidOperationException: Impossibile trovare una proprietà o un campo denominato '"Products","Categories"' nel tipo di contesto dati 'NorthwindDataContext' di LinqDataSource 'LinqDataSource1'.]
System.Web.UI.WebControls.LinqDataSourceView.CreateContextAndTable() +458
System.Web.UI.WebControls.LinqDataSourceView.EnsureContextAndTable(Boolean selecting) +39
System.Web.UI.WebControls.LinqDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +421
System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +17
System.Web.UI.WebControls.DataBoundControl.PerformSelect() +149
System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +70
System.Web.UI.WebControls.GridView.DataBind() +4
System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +82
System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() +69
System.Web.UI.Control.EnsureChildControls() +87
System.Web.UI.Control.PreRenderRecursiveInternal() +50
System.Web.UI.Control.PreRenderRecursiveInternal() +170
System.Web.UI.Control.PreRenderRecursiveInternal() +170
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2041
Ottimo, dallo stack trace mi sembra chiaro che il tuo oggetto Product non abbia una proprietà di tipo Categories. Ora... quando ti ho risposto la prima volta ho scritto
Intanto mi sembra strano che la proprietà del tuo oggetto Product si chiami Categories, di solito il designer di Linq2Sql imposta i nomi al singolare, quindi verificalo ed eventualmente apporta le necessarie modifiche alla proprietà Select di LinqDataSource.

Domanda: la proprietà che esprima la relazione nel tuo data model come si chiama? Sei sicuro che la tua classe Product abbia una proprietà di nome Categories? o forse ha "Category" (al singolare)?
71 messaggi dal 06 settembre 2007
Ti confermo che il data model ricalca fedelmente i nomi delle tabelle del db pertanto le due tabelle relazione sono Products e Categories (probabilmente ciò dipende dalla versione di visula studio che sto utilizzando).

All'interno dell'oggetto Products la proprietà che esprime la relazione con l'oggetto Categories è "CategoryID";

nel data model la Participant.Properties = Categories.CategoryID -> Products.CategoryID
Le due tabella in relazione sono Products e Categories, entrambe con una bella proprietà CategoryID, questo mi è chiaro.
Ora, se però hai definito una relazione tra le due entity (e quindi hai una freccina nel tuo diagramma degli oggetti) clickando sulla freccina vedi che questa ha due proprietà ChildProperty e ParentProperty. Se espandi quest'ultima, che nome vedi?

Inoltre, se vai nel codice e dichiari una variabile di tipo Product, dovresti notare la presenza di una proprietà di tipo Category oltre alla CategoryID.

Questo nome è quello che devi mettere nella tua clausola select.

m.
71 messaggi dal 06 settembre 2007
La Parent Property è uguale a Categories

non ho capito cosa intendi con:

se vai nel codice e dichiari una variabile di tipo Product, dovresti notare la presenza di una proprietà di tipo Category oltre alla CategoryID.
Questo nome è quello che devi mettere nella tua clausola select.

Potresti spiegarti con un esempio?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.