71 messaggi dal 06 settembre 2007
Ciao a tutti,

sto utilizzando Visual Web Developer 2008 per costruire una semplice GridView che usi come sorgente dati un LinqDataSource.
Ho definito il mio database datamodel utilizzando il database Northwind:
in buona sostanza ho due tabelle: Products e Categories in cui è stata definita una relazione uno a molti "Categories.CategoryID -> Products.CategoryID"

Nella proprietà Select del LinqDataSource ho specificato quanto segue:
new (ProductName, UnitPrice, UnitsInStock, Discontinued, Categories.CategoryName as CategoryName)

in modo da visualizzare nella griglia anche la colonna CategoryName della tabella relazionata Categories;
nella GridView ho definito la colonna CategoryName come segue:

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

quando mando in esecuzione il progetto ootengo il seguente errore:
Impossibile trovare una proprietà o un campo denominato '"","Categories"' nel tipo di contesto dati 'NorthwindDataContext' di LinqDataSource 'LinqDataSource1'.

E' come se il LinqDataSource non vedesse correttamente il mio datacontext.

Avete qualche idea in proposito?
daniga
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.

In secondo luogo, nella griglia utilizza il solo nome della proprietà, quindi CategoryName e non Categories.CategoryName.

Let me know...
Ciao,
m.
652 messaggi dal 21 gennaio 2007
Contributi
La tua entità Product non ha una proprietà "Categories", al massimo avrà una CategoryID..
Secondo me, devi effettuare il load delle informazioni dell'entity correlata all'interno dell'evento ContextCreated del controllo LinqDataSource.
in modo tale da specificare il datacontext che vengano trecuperati anche i valori dell'entià Categories.

protected void linqDS_ContextCreated(object sender, LinqDataSourceStatusEventArgs e)
{
  DataLoadOptions options = new DataLoadOptions();
  options.LoadWith(o => o.Category);
  (e.Result as NorthwindDataContext).LoadOptions = options;
}
71 messaggi dal 06 settembre 2007
ho inserito il seguente evento:

protected void LinqDataSource1_ContextCreated(object sender, LinqDataSourceStatusEventArgs e)
{
DataLoadOptions options = new DataLoadOptions();
options.LoadWith<Categories>(Categories => Categories.CategoryName);

(e.Result as NorthwindDataContext).LoadOptions = options;
}

Adesso ottengo il seguente errore:
System.NullReferenceException non è stata gestita dal codice utente
Message="Riferimento a un oggetto non impostato su un'istanza di oggetto."
Source="App_Web_wprliyl1"
StackTrace:
in _Default.LinqDataSource1_ContextCreated(Object sender, LinqDataSourceStatusEventArgs e) in d:\appoggio\websites\1234\LDS.aspx.cs:riga 24
in System.Web.UI.WebControls.LinqDataSourceView.OnContextCreated(LinqDataSourceStatusEventArgs e)
in System.Web.UI.WebControls.LinqDataSourceView.CreateContextAndTable()
in System.Web.UI.WebControls.LinqDataSourceView.EnsureContextAndTable(Boolean selecting)
in System.Web.UI.WebControls.LinqDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments)
in System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback)
in System.Web.UI.WebControls.DataBoundControl.PerformSelect()
in System.Web.UI.WebControls.BaseDataBoundControl.DataBind()
in System.Web.UI.WebControls.GridView.DataBind()
in System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound()
in System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls()
in System.Web.UI.Control.EnsureChildControls()
in System.Web.UI.Control.PreRenderRecursiveInternal()
in System.Web.UI.Control.PreRenderRecursiveInternal()
in System.Web.UI.Control.PreRenderRecursiveInternal()
in System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
InnerException:
metti un punto d'interruzione e controlla il valore di e.Result

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
71 messaggi dal 06 settembre 2007
si verifica una exception che mi dice "impossibile trovare un campo o una proprietà denominata categories".

non riesco a capire dove sia l'errore, pare comunaque che non veda la tabella categories.
Tempo fa ho scritto
In secondo luogo, nella griglia utilizza il solo nome della proprietà, quindi CategoryName e non Categories.CategoryName.


l'hai fatta la modifica?
71 messaggi dal 06 settembre 2007
purtroppo non cambia nulla, non riesco a capire il motivo per il quale in fase di debug l'evento "e.Result" risulti null;

protected void LinqDataSource1_ContextCreated(object sender, LinqDataSourceStatusEventArgs e)
{

DataLoadOptions options = new DataLoadOptions();
options.LoadWith<Categories>(Categories => Categories.CategoryName);

(e.Result as NorthwindDataContext).LoadOptions = options;
}

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.