J'ai un listview, où je place la source de données dans le code derrière - cela fonctionne très bien. Lorsque j'ajoute un autre listview (ou un contrôle de base de données) au itemtemplate du listview, et que je place la source de données pour ce contrôle dans le codebehind, les champs retournés par la requête semblent être indisponibles pour la listview imbriquée; ASP.NET renvoie l'erreur suivante: DataBinding: 'System.String' ne contient pas une propriété avec le nom 'j_Name'.Liaison de données listview imbriquée - propriété non trouvée?
Dans l'exemple ci-dessous, d_Description fonctionne correctement, tandis que j_Role renvoie l'erreur indiquée ci-dessus. Je peux voir les données renvoyées par la requête, et je sais que les noms des colonnes correspondent, alors quelle est l'origine de l'erreur (et comment puis-je la résoudre)?
page ASPX
<asp:ListView ID="LV1" runat="server">
<LayoutTemplate>
<table runat="server" id="tblSummary">
<tr runat="server" id="itemPlaceholder" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td>
<%#Eval("d_Description")%>
</td>
</tr>
<tr>
<td>
<asp:ListView ID="LV2" runat="server">
<ItemTemplate>
<%#Eval("j_Role")%>
</ItemTemplate>
<LayoutTemplate>
<asp:placeholder id="itemPlaceholder" runat="server" />
</LayoutTemplate>
</asp:ListView>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
CODE DERRIÈRE
var qry1 = from q in context.Descriptions select q.d_Description;
LV1.DataSource = qualificationQry;
LV1.DataBind();
var qry2 = from q in context.Roles select q.j_Role;
LV2.DataSource = qualificationQry;
LV2.DataBind();
EDIT: J'ai ajouté le code similaire à celui ci-dessous pour l'événement ItemDataBound du listview extérieur, et je suis encore la rencontre la même erreur. Vraisemblablement, je suis mal compris l'instructon?
protected void LV_ItemDataBound(object sender, ListViewItemEventArgs e)
{
using (dbDataContext context = new dbDataContext()
{
var qry2 = from q in context.Roles select q.j_Role;
ListView tempLV = (ListView)e.Item.FindControl("LV2");
tempLV.DataSource = qry2;
tempLV.DataBind();
}
}
EDIT: 2 Après avoir lu sur le web un peu plus (maintenant que j'ai une idée de ce qu'il faut rechercher) la réponse proposée semble être correcte - cependant, il ne fonctionne pas - peut-on suggérer Pourquoi?
EDIT: 3 Si je fossé la sortie des j_Name, et juste une chaîne hardcoded, il n'y a pas d'erreur, et la chaîne hardcoded Ouputs le nombre prévu de fois. Cela indiquerait que c'est juste le nom de la colonne (j_Name) qui est faux - même si je peux voir l'ensemble de données revenir de la requête avec ce nom de colonne exact.
EDIT: 4 L'a corrigé. Ceci est faux var qry2 = from q in context.Roles select q.j_Role;
Ceci est correct var qry2 = from q in context.Roles select q;
Merci, mais pouvez-vous être un peu plus précis? – user9659
édité pour être plus précis - il y a un lien vers les documents msdn pour ItemDataBound là aussi si vous avez besoin de plus d'informations –
Voir mon edit à la question d'origine - J'ai fait ce que vous avez proposé et je suis toujours la même erreur (Je peux voir l'événement appelé, et les données qui reviennent de la base de données ok là, je reçois toujours l'erreur de propriété system.string si). – user9659