Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Filter Data using EntityDataSource

I use EF 4, C# and MS Membership Provider.

I have a GridView with DataSource an EntityDataSource web control.

I would like filter Data using EntityDataSource, filter show apply for the Current Logged-In User, this value should be taken using MS Memebership Provider ( Membership.GetUser(); ).

Now I cannot inf any Parameter in EntityDataSource that would allow me to dot that (in Where/Automatically generate a Where expression using provided parameter ).

Do you have any ideas?

Please provide me a sample of code. Thanks for your time!

like image 586
GibboK Avatar asked Dec 22 '22 16:12

GibboK


1 Answers

You cannot bind the user's identity declaratively in markup directly to the EntityDataSource. But there are basically two workarounds:

The first is the easier one but requires code-behind. You can use a generic asp:Parameter and set its value in code-behind to the user's identity:

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;
}

The second way is to create a custom parameter. An example how to do that is shown here. Note: The example is based on a asp:SqlDataSource but it should work as well for an EntityDataSource if you make sure that you use WhereParameters in the EntityDataSource instead of SelectParameters in the SqlDataSource.

like image 189
Slauma Avatar answered Jan 05 '23 04:01

Slauma