252 messaggi dal 03 dicembre 2001
www.fuossbook.it
Ciao a tutti,
ho inserito in una web form due user control DropDownList che ho riempito tramite SelectMethod
Precedentemente avevo creato le classi in ADO.NET Entity Data Model

Sto seguendo la guida ASP.NET 4.5 e ASP.NET MVC 4.0 in C# e VB
che porta un esempio per cambiare i dati della seconda DropDownList dopo la selezione della prima.
Sto riscontrando però un problema della where in quanto l'esempio fornito porta una where con una string mentre io vorrei farla con un int, in quanto sto cercando di utilizzare le chiavi primarie che ho nella mia tabella (mi sembra più logico e veloce)

L'esempio fornito porta questo codice


 private string catId;


        public string ProprietaCatID
        {
            get { return catId; }
            set
            {
                if(catId != value)
                {
                    catId = value;
                    this.GridView1.DataBind();
                }


            }


        }






        BookstoreContext bookconn = new BookstoreContext();


        protected void Page_Load(object sender, EventArgs e)
        {


        }


     


        public IQueryable<SottoCategorie> GridView1_GetData()
        {
            return bookconn.SottoCategorie.Where(o => o.idCat == this.ProprietaCatID);


        }


L'errore che mi viene dato in questo punto
return bookconn.SottoCategorie.Where(o => o.idCat == this.ProprietaCatID);

è questo
Non è possibile applicare l'operatore '==' a operandi di tipo 'int?' e 'string'

Il messaggio parla anche di string quindi non ho capito come ha fatto l'esempio a funzionare, ma intanto stavo io provando a fare qualche cambio
Il primo cambio che ho fatto è quello di variare le variabili string in int

quindi questo
private string catId;
public string ProprietaCatID

l'ho trasformato in questo
private int catId;
public int ProprietaCatID


però a questo punto il messaggio di errore mi cambia

Non è possibile convertire in modo implicito il tipo 'System.Linq.IQueryable<EntityDataModel.Models.SottoCategorie>' in 'System.Linq.IQueryable<EntityDataModel.SottoCategorie>'.

il correttore mi dice di levare il this.
ma anche se lo levo non cambia nulla
quindi ho provato quindi ad aggiungere un cast

scrivendo così
return bookconn.SottoCategorie.Where(o => o.idCat == (int)this.ProprietaCatID);

ma l'errore mi si trasforma in questo
Non è possibile convertire in modo implicito il tipo 'System.Linq.IQueryable<EntityDataModel.Models.SottoCategorie>' in 'System.Linq.IQueryable<EntityDataModel.SottoCategorie>'. È presente una conversione esplicita. Probabilmente manca un cast.

Avete qualche suggerimento?
Cosa sto sbagliando, credo che la mia logia di usare un int (le chiavi primarie) sia giusta

Grazie

***************************
webmaster di:
hydrasail.blogspot.it
fuossbook.it
***************************
11 messaggi dal 28 aprile 2006
Ciao,
probabilmente nel progetto coesistono 2 due classi "SottoCategorie" all'interno dei namespace "Entity.DataModel" ed "Entity.DataModel.Model".

Quindi, dal momento che la versione corretta dovrebbe essere quella contenuta in Entity.DataModel.Model perché la classe BookstoreContext si riferisce ad entità di questo namespace, dovresti modificare il tipo restituito dal metodo GridView1_GetData in
IQueryable<Entity.DataModel.Model.SottoCategorie>
252 messaggi dal 03 dicembre 2001
www.fuossbook.it
cicorvin ha scritto:
Ciao,
probabilmente nel progetto coesistono 2 due classi "SottoCategorie" all'interno dei namespace "Entity.DataModel" ed "Entity.DataModel.Model".

Quindi, dal momento che la versione corretta dovrebbe essere quella contenuta in Entity.DataModel.Model perché la classe BookstoreContext si riferisce ad entità di questo namespace, dovresti modificare il tipo restituito dal metodo GridView1_GetData in
IQueryable<Entity.DataModel.Model.SottoCategorie>



Ciao ho verificato che ho una classe SottoCategorie all'interno del Models dove ho creato l'edmx che richiama la tabella Sottocategorie
namespace EntityDataModel.Models
{
    using System;
    using System.Collections.Generic;
    
    public partial class SottoCategorie
    {
        public int idScat { get; set; }
        public Nullable<int> idCat { get; set; }
        public string SottoCategoria { get; set; }
    }
}


L'altro forse era la classe contenuta nel file su cui sto lavorando
 public partial class SottoCategorie : System.Web.UI.UserControl


Per non fare confusione ho cambiato anche il nome del file Web Control utente in ListaSottoCat


Quindi Ho provato a cambiare l'IQueryable<SottoCategorie> come da te indicato in public IQueryable<EntityDataModel.Models.SottoCategorie> GridView1_GetData()

Infine ho cambiato le string in int

E' sparito l'errore

Ora non mi carica la GridView1 sul cambio della select, ma questo credo che sia un altro problema.
Mi riguardo tutto l'esercizio
Intanto grazie mille

***************************
webmaster di:
hydrasail.blogspot.it
fuossbook.it
***************************
11 messaggi dal 28 aprile 2006
bene mi fa piacere che hai individuato la causa dell'errore, in effetti si tratta di un conflitto dovuto alla gerachia dello spazio dei nomi, i quali dovrebbero evitare proprio problemi di conflitto tra gli identificatori dei tipi però come si dice.. nessuno è perfetto :)

Dal momento che hai modificato il nome del componente ui in ListaSottoCategorie,non doivrebbero esserci più conflitti per cui puoi anche utilizzare semplicemente List<SottoCategorie> per il tipo restituito dal metodo GridView1_GetData, così è più leggibile.

Spero che nel frattempo hai anche risolto l'altro problema che sembrava se non ho capito male legato alla gestione degli eventi del componente Grid_View..

un saluto

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.