我正在我的网络应用程序中实现用户名和角色创建的成员资格。我的经理 想要将用户名显示为GridView的一列,在其下面应该显示用户名(再次),并且角色应该作为网格的其他列名放置。分配给每个用户的角色应以复选框形式显示,其中在该列中分配的角色为已选中,反之亦然。
以下是从成员资格数据库中检索用户名和角色的代码:
var roles = from MembershipUser u in Membership.GetAllUsers()
select new
{
User = u.UserName,
Role = Roles.GetRolesForUser(u.UserName).FirstOrDefault()
};
基于这个查询,我需要得到上面解释的GridView。有人可以告诉我该怎么做吗?
答案 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();
}