2011-03-28 4 views
4

J'utilise EF 4, C# et MS Membership Provider.Filtrer les données avec EntityDataSource

J'ai un GridView avec DataSource un contrôle Web EntityDataSource.

Je voudrais filtrer les données en utilisant EntityDataSource, le filtre show s'applique à l'utilisateur actuellement connecté, cette valeur devrait être prise en utilisant MS Memebership Provider (Membership.GetUser();).

Maintenant, je ne peux inf inf paramètre dans EntityDataSource qui me permettrait de dot que (dans Où/Générer automatiquement une expression Où en utilisant le paramètre fourni).

Avez-vous des idées?

Veuillez me fournir un échantillon de code. Merci pour votre temps!

Répondre

11

Vous ne pouvez pas lier l'identité de l'utilisateur de manière déclarative dans le balisage directement à EntityDataSource. Mais il existe essentiellement deux solutions de contournement:

Le premier est le plus facile mais nécessite un code-behind. Vous pouvez utiliser un asp:Parameter générique et définir sa valeur dans le code-behind à l'identité de l'utilisateur:

Markup:

<asp:EntityDataSource ID="MyEntityDataSource" runat="server" 
    ConnectionString="name=MyContext" 
    DefaultContainerName="MyContext" 
    EntitySetName="MyObjectSet" 
    AutoGenerateWhereClause="False" 
    Where="it.Username = @Username" 
    <WhereParameters> 
     <asp:Parameter Name="Username" Type="String" /> 
    </WhereParameters> 
</asp:EntityDataSource> 

code-behind:

protected void Page_Load(object sender, EventArgs e) 
{ 
    MyEntityDataSource.WhereParameters["Username"].DefaultValue = 
     User.Identity.Name; 
} 

La deuxième façon est de créer un paramètre personnalisé. Un exemple de la façon de faire est montré here. Remarque: L'exemple est basé sur un asp:SqlDataSource mais il devrait fonctionner aussi bien pour un EntityDataSource si vous vous assurez que vous utilisez WhereParameters dans EntityDataSource au lieu de SelectParameters dans le SqlDataSource.

+0

Merci Slauma, j'ai suivi votre conseil et j'ai mis en place le "paramètre personnalisé". Merci pour votre temps – GibboK

Questions connexes