[英]Displaying Member info including Roles using Sql Membership Provider
我希望根據SqlMembershipProvider模式使用數據庫表設置來創建所有用戶的摘要表。 到目前為止,我有:
<asp:GridView ID="UserAccounts" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="UserName" HeaderText="UserName" />
<asp:BoundField DataField="Email" HeaderText="Email" />
<asp:TemplateField HeaderText="Role">
<ItemTemplate>
<asp:TextBox ID="RoleText" ReadOnly="true" runat="server">
</asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
表和代碼背后:
UserAccounts.DataSource = Membership.GetAllUsers();
UserAccounts.DataBind();
生成用戶列表。 但是,就像您熟悉SQLmembershipprovider的人一樣,與用戶關聯的角色位於多個單獨的表中。 因此,我不確定如何檢索該信息並將其顯示在每個用戶旁邊。
我目前正在考慮的解決方案是以某種方式逐行遍歷表,然后對該用戶名調用Roles.GetRolesForUser()以檢索信息,然后將其綁定到表。 但是,我不確定到底該怎么做,甚至不是最有效的方法。
您可以通過DataTable使用此方法
public DataSet CustomGetAllUsers() {
DataSet ds = new DataSet();
DataTable dt = new DataTable();
dt = ds.Tables.Add("Users");
MembershipUserCollection muc;
muc = Membership.GetAllUsers();
dt.Columns.Add("UserName", Type.GetType("System.String"));
dt.Columns.Add("Email", Type.GetType("System.String"));
dt.Columns.Add("CreationDate", Type.GetType("System.DateTime"));
/* Here is the list of columns returned of the Membership.GetAllUsers() method
* UserName, Email, PasswordQuestion, Comment, IsApproved
* IsLockedOut, LastLockoutDate, CreationDate, LastLoginDate
* LastActivityDate, LastPasswordChangedDate, IsOnline, ProviderName
*/
foreach(MembershipUser mu in muc) {
DataRow dr;
dr = dt.NewRow();
dr["UserName"] = mu.UserName;
dr["Email"] = mu.Email;
dr["CreationDate"] = mu.CreationDate;
dt.Rows.Add(dr);
}
return ds;
}
綁定:
UserAccounts.DataSource = CustomGetAllUsers().Tables[0] ;
UserAccounts.DataBind();
您還可以使用Eval.DataBinder
修改ItemTemplate
嘗試綁定到
var userRoles = from MembershipUser user in Membership.GetAllUsers()
from role in Roles.GetRolesForUser(user.UserName)
select new {
UserName = user.UserName, Email = user.Email, Role = role };
要么
var userRoles = from MembershipUser user in Membership.GetAllUsers()
let roles = Roles.GetRolesForUser(user.UserName)
select new {
UserName = user.UserName,
Email = user.Email,
Roles = string.Join(", ", roles) };
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.