0

SqlMembershipProvider スキーマに従ってセットアップされたデータベース テーブルを使用して、すべてのユーザーの概要テーブルを作成したいと考えています。これまでのところ、私は持っています:

<asp:GridView ID="UserAccounts" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:BoundField DataField="UserName" HeaderText="UserName" />
        <asp:BoundField DataField="Email" HeaderText="Email" />
        <asp:TemplateField HeaderText="Role">
            <ItemTemplate>
                <asp:TextBox ID="RoleText" ReadOnly="true" runat="server">
                </asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

テーブル、および分離コード:

UserAccounts.DataSource = Membership.GetAllUsers();
UserAccounts.DataBind();

ユーザーのリストを生成します。ただし、SQLmembershipprovider に精通している方のように、ユーザーに関連付けられたロールは複数の個別のテーブルに格納されています。したがって、その情報を取得して各ユーザーの横に表示する方法がわかりません。

私が現在考えている解決策は、テーブルを行ごとにトラバースし、そのユーザー名で Roles.GetRolesForUser() を呼び出して情報を取得し、それをテーブルにバインドすることです。ただし、これを行う方法と、それが最も効率的な方法であるかどうかはわかりません。

4

2 に答える 2

0

このメソッドとDataTableを使用できます

public DataSet CustomGetAllUsers()    {
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        dt = ds.Tables.Add("Users");

        MembershipUserCollection muc;
        muc = Membership.GetAllUsers();

        dt.Columns.Add("UserName", Type.GetType("System.String"));
        dt.Columns.Add("Email", Type.GetType("System.String"));
        dt.Columns.Add("CreationDate", Type.GetType("System.DateTime"));

        /* Here is the list of columns returned of the Membership.GetAllUsers() method
         * UserName, Email, PasswordQuestion, Comment, IsApproved
         * IsLockedOut, LastLockoutDate, CreationDate, LastLoginDate
         * LastActivityDate, LastPasswordChangedDate, IsOnline, ProviderName
         */

        foreach(MembershipUser mu in muc) {
            DataRow dr;
            dr = dt.NewRow();
            dr["UserName"] = mu.UserName;
            dr["Email"] = mu.Email;
            dr["CreationDate"] = mu.CreationDate;
            dt.Rows.Add(dr);
        }
        return ds;
    }

練る :

UserAccounts.DataSource = CustomGetAllUsers().Tables[0] ;
UserAccounts.DataBind();

あなたはまたあなたItemTemplateを適応させることができますEval.DataBinder

于 2012-09-20T17:24:29.047 に答える
0

バインドしてみる

    var userRoles = from MembershipUser user in Membership.GetAllUsers()
                    from role in Roles.GetRolesForUser(user.UserName)
                    select new { 
                        UserName = user.UserName, Email = user.Email, Role = role };

また

    var userRoles = from MembershipUser user in Membership.GetAllUsers()
                    let roles = Roles.GetRolesForUser(user.UserName)
                    select new {
                        UserName = user.UserName, 
                        Email = user.Email,
                        Roles = string.Join(", ",  roles) };
于 2012-09-20T17:38:49.553 に答える