如何在GridView上为每个用户显示多个成员角色作为CheckBox?

时间:2013-09-19 13:04:06

标签: c# asp.net gridview asp.net-membership

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

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

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

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

1 个答案:

答案 0 :(得分: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();
}