代码之家  ›  专栏  ›  技术社区  ›  vikas

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

  •  1
  • vikas  · 技术社区  · 12 年前

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

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

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

    基于这个查询,我需要获得上面解释的GridView。有人能教我怎么做吗?

    1 回复  |  直到 12 年前
        1
  •  2
  •   Samiey Mehdi    12 年前

    试试这个

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