如何在 GridView 上为每个用户显示多个成员身份角色作为复选框

本文关键字:成员 身份 角色 复选框 显示 用户 GridView | 更新日期: 2023-09-27 18:31:54

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

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

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

基于此查询,我需要获取上面解释的 GridView。 有人可以告诉我如何做到这一点吗?

如何在 GridView 上为每个用户显示多个成员身份角色作为复选框

试试这个

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