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!
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With