2009-04-29 6 views
0

Lorsque vous utilisez l'outil de tri de GridView avec Entity Framework, je peux afficher les valeurs de clé étrangère. Par exemple ...Tri par valeurs de clé étrangère dans GridView avec Entity Framework?

<asp:boundfield HeaderText="Category" DataField="Category.Name" SortExpression="Category.Name" /> 

... mais quand on clique sur l'en-tête pour trier les éléments de la grille, comment puis-je trier ma liste de Liste par Category.Name?

Je n'ai que la chaîne "Category.Name", je ne peux pas le faire:

.OrderBy(e => e.Category.Name) 

donc j'ai essayé ... La réflexion

private static object GetPropertyValue(object obj, string propertyName) 
{ 
    PropertyInfo propertyInfo = obj.GetType().GetProperty(propertyName); 
    return propertyInfo.GetValue(obj, null); 
} 

// list is List<Widget> 
// with a breakpoint here, ((Widget)list[i]).Companies.Name exists in all Widgets 
list.OrderBy(e => GetPropertyValue(e, "Category.Name")) 

... qui ne travail. Aucune exception levée, mais ne pas trier par Category.Name.

Des idées?

Répondre

3

J'ai essayé de comprendre ceci pendant les deux derniers jours pendant que je déplace une application existante d'ASP.NET d'employer SqlDataSources à EntityDataSources. J'ai trouvé que vous devez placer un "ça". devant la déclaration.

Donc, en prenant votre exemple ci-dessus, vous devrez former comme ceci:

<asp:boundfield HeaderText="Category" DataField="Category.Name" SortExpression="it.Category.Name" /> 

J'ai une source de données d'entité qui ressemble à ceci:

<asp:EntityDataSource runat="server" ID="edsResourceRoles" ConnectionString="name=SkillsEntities" 
    DefaultContainerName="SkillsEntities" EnableUpdate="true" EnableDelete="true" 
    EnableInsert="true" EntitySetName="ResourceRoles" Where="it.resource_id = @resource_id" 
    Include="Roles,Competency_Level" OrderBy="it.Roles.roles_nm"> 

puis i pouvez contrôler le tri de la colonne Roles Name en utilisant le SortExpression = "it.Roles.roles_nm".

J'espère que cela aide quelqu'un d'autre qui cherche une réponse.

+0

ceci devrait être marqué comme réponse, bon article –

+0

Comment avez-vous trouvé ceci? Est-ce documenté * n'importe où *? Je me rends compte que cette réponse a presque 4 ans, mais ce serait bien si quelqu'un pouvait faire la lumière sur ce sujet, puisque je m'attendais à ce que ça ne marche pas, mais c'est ce qui s'est passé. – Vivelin

Questions connexes