2015-08-25 2 views
0

У меня есть веб-формы в ASP.NET, в котором я хотел бы показать таблицу со всеми пользователями в моем приложении. Должно быть имя пользователя, адрес электронной почты пользователя, дата последней активности и роли пользователя.Добавить столбец ролей в DataGrid в ASP.NET Web Form

В настоящее время я есть это:

<asp:DataGrid id="UserGrid" runat="server" 
      CellPadding="2" CellSpacing="1" 
      Gridlines="Both" AutoGenerateColumns="false"> 
    <Columns> 
    <asp:BoundColumn DataField="UserName" ReadOnly="False" HeaderText="Name" /> 
    <asp:BoundColumn DataField="Email" ReadOnly="True" HeaderText="Email" /> 
    <asp:BoundColumn DataField="LastActivityDate" ReadOnly="True" HeaderText="Last activity"/> 
</Columns> 
<HeaderStyle BackColor="darkblue" ForeColor="white" /> 

</asp:DataGrid> 

_

UserGrid.DataSource = Membership.GetAllUsers(); 
UserGrid.DataBind(); 

Я хотел бы добавить роли столбцов этой DataGrid. Как я могу это сделать?

В следующем шаге я хочу добавить столбец с кнопками для редактирования пользователей информации, управлять его роли и т.д.

+0

сделать у вас роль пользователей в вашем ДАТЕ сокращать таблицу? – shreesha

+0

Да. Я могу сделать для всех пользователей: string [] role = Roles.GetRolesForUser (имя пользователя); но я не знаю, как добавить эти данные в новый столбец в DataGrid или, возможно, добавить эти данные в DataSource? – holocen

+0

ваш 'Membership.GetAllUsers();' извлекает ** UserRoles ** также правильно? Или это в другом запросе? – shreesha

ответ

0

Добавить столбцы вашего GridView, как показано ниже

<asp:GridView id="UserGrid" runat="server" 
       CellPadding="2" CellSpacing="1" 
       Gridlines="Both" AutoGenerateColumns="false"> 
     <Columns> 
     <asp:BoundColumn DataField="UserName" ReadOnly="False" HeaderText="Name" /> 
     <asp:BoundColumn DataField="Email" ReadOnly="True" HeaderText="Email" /> 
     <asp:BoundColumn DataField="LastActivityDate" ReadOnly="True" HeaderText="Last activity"/> 
     <asp:TemplateField HeaderText="User Roles" ItemStyle-Width="30%"> 
                  <ItemTemplate> 
                   <asp:Label ID="lblrole" runat="server" %>'></asp:Label> 
                  </ItemTemplate> 
                 </asp:TemplateField> 
    </Columns> 
    <HeaderStyle BackColor="darkblue" ForeColor="white" /> 

    </asp:GridView> 

Объявите глобальную переменную для хранения ваши роли пользователя.

string[] roles; 

В загрузке страницы получить ваши данные

protected void page_load(object sender,EventArgs e) 
{ 
if(!IsPostBack) 
{ 
string[] roles=GetUserRoles(); 
} 
} 

В Вашем случае RowDataBound добавить данные на GridView

protected void UserGrid_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if(e.Row.RowType= DataControlRowType.DataRow) 
     { 
     e.Row.FindControl("lblrole").Text=roles[e.Row.RowIndex]; 
     } 
    } 

Если порядок данных не соответствует, то сортировать как по collections.Here DataField вашей база данных имя столбца или псевдоним используется в запросе

+0

Как мне сделать DataSource для этой сетки? Теперь у меня есть: UserGrid.DataSource = Membership.GetAllUsers(); UserGrid.DataBind(); и я не знаю, как добавить к этой информации данные о ролях пользователей, как добавить в поле MembershipUserCollection с ролями. My Membership.GetAllUsers(); не содержит UserRoles. – holocen

+0

Membership.GetAllUsers() метод должен быть какой-то выполнение запроса на право на базу данных? Проверить, что запрос возвращает роли пользователя столбец – shreesha

+0

Membership.GetAllUsers() представляет собой метод из System.Web.Security (https://msdn.microsoft.com /en-us/library/dy8swhya%28v=vs.110%29.aspx), и у меня нет доступа к его запросу базы данных. Он возвращает MembershipUserCollection (https://msdn.microsoft.com/pl-pl/library/system.web.security.membershipusercollection%28v=vs.110%29.aspx), и нет поля о ролях. Я, вероятно, должен позвонить каждому пользователю: Roles.GetRolesForUser (имя пользователя) и каким-то образом добавить эти данные в свой DataGrid, но я не знаю, как это сделать. – holocen