4

私は EF 4、C#、および MS メンバーシップ プロバイダーを使用しています。

DataSource を持つ GridView と EntityDataSource Web コントロールがあります。

EntityDataSource を使用してデータをフィルター処理し、現在のログイン ユーザーにフィルター ショーを適用します。この値は、MS メンバーシップ プロバイダー ( Membership.GetUser(); ) を使用して取得する必要があります。

これで、EntityDataSource に任意のパラメーターを設定することはできません。

あなたはなにか考えはありますか?

コードのサンプルを提供してください。御時間ありがとうございます!

4

1 に答える 1

11

マークアップで宣言的にユーザーのIDをEntityDataSourceに直接バインドすることはできません。ただし、基本的に2つの回避策があります。

1つ目は簡単な方法ですが、コードビハインドが必要です。ジェネリックを使用して、asp:Parameterその値をコードビハインドでユーザーのIDに設定できます。

マークアップ:

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

コードビハインド:

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

2番目の方法は、カスタムパラメータを作成することです。その方法の例をここに示します。注:この例はに基づいていますが、SqlDataSourceではなくEntityDataSourceでasp:SqlDataSource使用していることを確認すると、EntityDataSourceでも同様に機能するはずです。WhereParametersSelectParameters

于 2011-03-28T19:21:20.137 に答える