使用EntityDataSource过滤数据

Gib*_*boK 4 c# asp.net entity-framework entitydatasource

我使用EF 4,C#和MS会员提供商.

我有一个带有DataSource的GridView和一个EntityDataSource Web控件.

我想使用EntityDataSource过滤数据,过滤器显示申请当前登录用户,此值应使用MS Memebership Provider(Membership.GetUser();).

现在我不能在EntityDataSource中输入任何允许我点的那个参数(在Where /使用提供的参数自动生成Where表达式中).

你有什么想法?

请提供一些代码示例.谢谢你的时间!

Sla*_*uma 11

您无法在标记中以声明方式将用户的标识直接绑定到EntityDataSource.但基本上有两种解决方法:

第一个是更容易的但需要代码隐藏.您可以使用泛型asp:Parameter并在代码隐藏中将其值设置为用户的标识:

标记:

<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>
Run Code Online (Sandbox Code Playgroud)

代码隐藏:

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

第二种方法是创建自定义参数.此处显示如何执行此操作的示例.注意:该示例基于a,asp:SqlDataSource但如果您确保WhereParameters在EntityDataSource中使用而不是SelectParameters在SqlDataSource中,它也应该对EntityDataSource有效.