Ciao,
oggi vi riporto un problema ormai frequente quando si comincia ad usare in applicazioni asp linq associato con gridview.
Immaginate di fare una select facendo varie join tra tabelle e poi passarla ad una gridview, sapete qual'è il risultato?
DataBinding:
'<>f__AnonymousType0`2.......... ovvero il campo non viene riconosciuto nella
sorgente dati passata alla gridview
La soluzione è associare il nome della tabella seguita dal nome campo alla proprietà DataField;
DataField="nomeTabella.nomeCampo"
però questo non basta poichè, o sia un problema o un peculiarità, il tutto funziona se si converte il campo in TemplateField.
Per capirci meglio vi riporto un esempio;
Immaginiamo di fare una semplice select fra due tabelle (ovviamente usando linq) e associarli alla gridview:
var query = from C in clienti
join OV in orariVisita on C.id equals OV.idCliente into JoinedCliOrarVis
from OV in JoinedCliOrarVis.DefaultIfEmpty()
select new { C, OV};
MiaDataGridView.DataSource = query;
MiaDataGridView.DataBind();
<asp:GridView ID="GridView4" runat="server" autogeneratecolumns="False"
width="10%">
<asp:BoundField DataField="C.nominativo" HeaderText="Nominativo" />
<asp:BoundField DataField="OV.oraVisita" HeaderText="Orario Visita" />
</asp:GridView>
In questo caso si ottiene l'errore ugualmente, ma se si converte il campo in TemplateField, il campo viene riconosciuto.
<asp:GridView ID="GridView4" runat="server" autogeneratecolumns="False"
width="10%">
<columns>
<asp:templatefield headertext="Nominativo">
<itemtemplate>
<asp:Label ID="NominativoLabel" runat="server"
text='<%# Eval("C.nominativo") %>'></asp:Label>
</itemtemplate>
</asp:templatefield>
<asp:templatefield headertext="Orario Visita">
<itemtemplate>
<asp:Label ID="OraVisitaLabel" runat="server"
text='<%# Eval("OV.oraVisita") %>'></asp:Label>
</itemtemplate>
</asp:templatefield>
</columns>
</asp:GridView>
Nessun commento:
Posta un commento