1

我正在为我的 Web 应用程序中的用户名和角色创建实施会员资格。我的经理想要将用户名显示为 GridView 的一列,用户名应显示在其下方(再次),并且角色应作为网格的其他列名放置。分配给每个用户的角色应以复选框形式显示,在该列中分配的角色为选中状态,反之亦然。

这是我从会员数据库中检索用户名和角色的代码:

var roles = from MembershipUser u in Membership.GetAllUsers()
                select new
                {
                    User = u.UserName,
                    Role = Roles.GetRolesForUser(u.UserName).FirstOrDefault()
                };

基于这个查询,我需要得到上面解释的 GridView。有人可以告诉我怎么做吗?

4

1 回答 1

2

尝试这个

var roles = from MembershipUser u in Membership.GetAllUsers()
                select new { User = u.UserName, 
                    Role = string.Join(",", Roles.GetRolesForUser(u.UserName))

更新:

ASPX:

<asp:GridView ID="GridView1" runat="server" 
        onrowdatabound="GridView1_RowDataBound" AutoGenerateColumns="False">
        <Columns>
            <asp:TemplateField HeaderText="Username">
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Eval("col0") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Role(Admin)">
                <ItemTemplate>
                    <asp:CheckBox ID="chkAdmin" runat="server" Checked='<%# Eval("col1") %>' />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Role(User)">
                <ItemTemplate>
                    <asp:CheckBox ID="chkUser" runat="server" Checked='<%# Eval("col2") %>' />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
</asp:GridView>

后面的代码:

protected void Page_Load(object sender, EventArgs e)
{
    BindGridviewData();
}
protected void BindGridviewData()
{  
    DataTable dTable = new DataTable();
    dTable.Columns.Add("col0", typeof(string));
    dTable.Columns.Add("col1", typeof(bool));
    dTable.Columns.Add("col2", typeof(bool));
    foreach (MembershipUser u in Membership.GetAllUsers())
    {
        DataRow dRow = dTable.NewRow();
        dRow[0] = u.UserName;

        string[] roles = Roles.GetRolesForUser(u.UserName);
        dRow[1] = roles.Contains("Admin") ? true : false;
        dRow[2] = roles.Contains("User") ? true : false;
        dTable.Rows.Add(dRow);
    }
    GridView1.DataSource = dTable;
    GridView1.DataBind();
}
于 2013-09-19T13:53:25.573 回答