sto cercando di creare un sito web Dynamic Data che dovrebbe consentire a un amministratore di modificare direttamente i dati nella maggior parte delle tabelle di un database."L'ORDER BY chiave di ordinamento (s) tipo deve essere fine-comparabile" con i dati dinamici
Finora, ho un EDMX e POCO classi, tutti collegati ad un'interfaccia utilizzata per applicare le DataAnnotations sui campi.
Voglio avere una griglia modificabile per ogni tabella, così ho modificato il modello ListDetails e seguito these instructions, che mi permette di avere la modifica in linea in un controllo ListView.
Con tutti questi, posso visualizzare e modificare i dati. Funziona.
Ma quando clicco sul colpo di testa (è un LinkButton
con il Comando Sort
e il nome della colonna come CommandArgument) di una colonna ForeignKey, ho sempre arrivare la seguente eccezione (ma i lavori di ordinamento sugli immobili "semplici"):
[EntitySqlException: il tipo di chiave di ordinamento ORDER BY deve essere comparabile all'ordine. Vicino espressione membri accesso, riga 6, colonna 3.]
Microsoft.AspNet.EntityDataSource.EntityDataSourceView.ExecuteSelect (DataSourceSelectArguments argomenti) 1325
System.Web.UI.DataSourceView.Select (DataSourceSelectArguments argomenti, DataSourceViewSelectCallback callback) + 21
System.Web.UI.WebControls.DataBoundControl.PerformSelect() +138
System.Web.UI.WebControls.ListView.PerformSelect() +167
System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +30
System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +105 System.W eb.UI.WebControls.BaseDataBoundControl.OnPreRender (EventArgs e) +22 System.Web.UI.Control.PreRenderRecursiveInternal() +83
System.Web.UI.Control.PreRenderRecursiveInternal() +155
System.Web. UI.Control.PreRenderRecursiveInternal() +155
System.Web.UI.Control.PreRenderRecursiveInternal() +155
System.Web.UI.Control.PreRenderRecursiveInternal() +155
System.Web.UI.Control.PreRenderRecursiveInternal() +155
System.Web.UI.Control.PreRenderRecursiveInternal() +155
System.Web.UI.Page.ProcessRequestMain (Boolean incl. udeStagesBeforeAsyncPoint, booleano includeStagesAfterAsyncPoint) +974
Esempio di tabella che sto cercando di visualizzare e ordinare (sto visualizzazione e la modifica LINK_ENTITES_MODELISEES, sto cercando di risolvere la colonna LOV_LOB):
[MetadataType(typeof(ILINK_ENTITES_MODELISEES_MetaData))]
public partial class LINK_ENTITES_MODELISEES : ILINK_ENTITES_MODELISEES_MetaData
{
public int id_entite_modelisee { get; set; }
public short id_entite { get; set; }
public short id_lob { get; set; }
public System.DateTime date_val_debut { get; set; }
public System.DateTime date_val_fin { get; set; }
public virtual LOV_ENTITE LOV_ENTITE { get; set; }
public virtual LOV_LOB LOV_LOB { get; set; }
}
public partial interface ILINK_ENTITES_MODELISEES_MetaData
{
[Key]
[Required(ErrorMessage = "id_entite_modelisee is required")]
int id_entite_modelisee { get; set; }
[Required(ErrorMessage = "id_entite is required")]
short id_entite { get; set; }
[Required(ErrorMessage = "id_lob is required")]
short id_lob { get; set; }
[Required(ErrorMessage = "date_val_debut is required")]
[DataType(DataType.Date)]
System.DateTime date_val_debut { get; set; }
[Required(ErrorMessage = "date_val_fin is required")]
[DataType(DataType.Date)]
System.DateTime date_val_fin { get; set; }
[Display(Name = "entite")]
LOV_ENTITE LOV_ENTITE { get; set; }
[Display(Name = "lob")]
LOV_LOB LOV_LOB { get; set; }
}
[MetadataType(typeof(ILOV_LOB_MetaData))]
[DisplayColumn("libelle", "libelle", false)]
public partial class LOV_LOB : ILOV_LOB_MetaData
{
public short id { get; set; }
public string libelle { get; set; }
public System.DateTime date_val_debut { get; set; }
public System.DateTime date_val_fin { get; set; }
}
public partial interface ILOV_LOB_MetaData
{
[Key]
[Required(ErrorMessage = "id is required")]
short id { get; set; }
[Required(ErrorMessage = "libelle is required")]
[StringLength(5)]
string libelle { get; set; }
[Required(ErrorMessage = "date_val_debut is required")]
[DataType(DataType.Date)]
System.DateTime date_val_debut { get; set; }
[Required(ErrorMessage = "date_val_fin is required")]
[DataType(DataType.Date)]
System.DateTime date_val_fin { get; set; }
}
Probabilmente non funziona perché sta cercando di ordinare sulla proprietà dell'oggetto e non sull'etichetta che sta usando, ma mi aspetterei che i dati dinamici lo gestiscano (usa la prima proprietà della stringa come valore di visualizzazione, perché può ' lo usa per l'ordinamento? Inoltre ho anche provato ad aggiungere l'attributo DisplayColumn, con lo stesso risultato).
Ho provato a gestire l'evento ListView.OnSorting
per modificare manualmente la proprietà EntityDataSource.OrderBy, aggiungendo il valore it.LOV_LOB.libelle
manualmente, per il test. Non ha funzionato. Ho anche cercato di gestire EntityDataSource.OnSelecting per vedere che cosa è il valore di EntityDataSource.OrderBy (se non lo imposto manualmente è sempre null
anche se l'ordinamento funziona). Sembra che venga ignorato o sostituito dopo questo evento. E l'Eccezione non specifica quale Ordine si sta cercando di applicare, quindi non sono sicuro di cosa stia cercando di fare. Ho provato a implementare IComparable
ma non ha funzionato. Ho sovrascritto ToString() per fornire il valore di visualizzazione, non ha funzionato neanche.
Sono fuori di idea. Qualche suggerimento ?
Se questo non risponde alla tua domanda, puoi per favore mostrare la tua richiesta. –
Qui sto usando Dati dinamici, il che significa che non ho alcuna query, tutto viene gestito automaticamente da 'EntityDataSource',' QueryExtender' e 'DynamicFilterExpression'. Come ho già detto, ho provato a forzare manualmente "EntityDataSource.OrderBy" su qualsiasi proprietà dell'oggetto, ma sembra essere ignorata. So come ordinare una query in SQL o Entity Framework, ma non riesco a trovare come farlo con Dynamic Data. –
@JulienN quando avrò tempo rivisiterò la mia risposta –