Sto lavorando a un progetto Web Forms che carica i risultati delle query Sql in DataTable s.Associazione dinamica all'oggetto aziendale personalizzato in Runtime
Questi DataTable s vengono passati al front-end in cui vengono associati a un controllo Web Repeater.
Questo funziona benissimo. Tuttavia, ora vorremmo associarci alle nostre classi personalizzate anziché a DataTable
. Purtroppo, quello che pensavo fosse la risposta ovvia non ha funzionato (implementando IDictionary<string, object>
sulla nostra classe).
Che cosa è necessario associare Eval a Datum senza creare una proprietà concreta per ogni associazione? Chiaramente DataRow non deve implementare concretamente tutte le proprietà che leghiamo. Quindi, in qualche modo sembra che Eval sia in grado di cercare i valori delle proprietà per nome su DataRow.
Ecco la classe personalizzata
public class Datum: IDictionary<string, object>
{
private Dictionary<string, object> _entries;
public Datum()
{
_entries = new Dictionary<string, object>();
}
public object this[string s]
{
get
{
return this._entries[s];
}
}
...
}
Qui è dove il DataSource viene impostato nelle aspx.cs presentare
rptTags.DataSource = new[] { new Datum { {"Count", 1} }, new Datum { {"Count", 2 } };
E qui è il legame nel file aspx
<asp:Repeater ID="rptTags" runat="server">
<ItemTemplate>
<%# (int)Eval("Count") >
</ItemTemplate>
</asp:Repeater>
Utilizzando l'esempio precedente viene visualizzato un errore che indica che la proprietà in questione non esiste, il che è vero, ma è d non esiste nemmeno su DataRow. Come posso farlo legare come System.Data.DataRow?
Potete condividere classe del modello dei dati e l'espressione eval, che avrebbe rendere più facile l'aiuto. –
"Questo rende un incubo provare e testare qualsiasi cosa." Per esempio? –
@mark Ok penso di averlo capito ... – Aristos