2012-09-20 3 views
0

Я хочу создать сводную таблицу всех пользователей с настройкой таблиц базы данных в соответствии с схемой SqlMembershipProvider. До сих пор у меня есть:Отображение информации о пользователе, включая роли с использованием Sql Членство в организации

<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() на этом имени пользователя, чтобы получить информацию, а затем привязать ее к таблице. Однако я не уверен точно, как это сделать, и если это даже самый эффективный метод.

+0

Я отредактировал ваше название. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

ответ

0

Попробуйте связывание с

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) }; 
+0

Простой и проработанный. Благодарю. EDIT: возможно ли добавить другой столбец из другой таблицы базы данных, к которой нельзя получить доступ так же легко, как использование Roles.GetROlesForUser? Btw - это метод, называемый LINQ? – Tony

+0

Да, это использует LINQ. Я настоятельно рекомендую посмотреть на http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b примеры того, как можно создавать запросы. Да, вы также можете вытащить вещи из таблиц, если вы объедините их с Entity Framework или LINQ to SQL. Измените свой вопрос с более подробной информацией о том, что вы хотите вытащить, и я постараюсь посмотреть завтра. – JamieSee

0

Вы можете этот метод и с 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; 
    } 

Bind:

UserAccounts.DataSource = CustomGetAllUsers().Tables[0] ; 
UserAccounts.DataBind(); 

Вы также можете адаптировать ваш ItemTemplate с Eval.DataBinder

+0

Это хорошая идея. Тем не менее, я не могу не задаться вопросом, существует ли способ слияния членства в членском членстве с другим datatable, учитывая, что новый datatable имеет один столбец с muc (например, имя пользователя) и другие столбцы, созданные с использованием данных из других источников? – Tony

+0

Да, вы можете объединиться, вы добавляете столбцы в эту таблицу, и вы импортируете данные из другого источника. –

 Смежные вопросы

  • Нет связанных вопросов^_^