Изменить столбец из DataGridView во время выполнения - PullRequest
1 голос
/ 23 августа 2010

Это, наверное, легко, но я нигде не мог найти ответ. Я заполняю ранее созданный DataGridView в веб-форме ASP.NET динамически с помощью DataTable, но я хочу изменить имя столбцов, которые появляются в этом DataGridView, и я просто не могу понять, что я делаю неправильно , Ниже приведен код:

DataTable dtUsuarios = DBManager.RunSqlGetDataTable(
  @"select b.UserName, c.Email, c.IsLockedOut, c.LastLoginDate, 
      case 
        when e.RoleName is not null then 1
        else 0 end Admin
    from dbo.aspnet_Applications a join dbo.aspnet_Users b
      on a.ApplicationId = b.ApplicationId
    join dbo.aspnet_Membership c
      on b.ApplicationId = c.ApplicationId
      and b.UserId = c.UserId
    left join dbo.aspnet_UsersInRoles d
      on d.UserId = b.UserId
    left join dbo.aspnet_Roles e
      on d.RoleId = e.RoleId
    where a.ApplicationName = 'Mont Blanc Catalogo'");
dtUsuarios.Columns["UserName"].Caption = "Nome Usuário";
dtUsuarios.Columns["Email"].Caption = "E-mail";
dtUsuarios.Columns["IsLockedOut"].Caption = "Bloqueado";
dtUsuarios.Columns["LastLoginDate"].Caption = "Último Login";
dtUsuarios.Columns["Admin"].Caption = "Administrador";
DataView dvUsuarios = new DataView(dtUsuarios) { Sort = "UserName" };
gdvUsuarios.DataSource = dvUsuarios;
gdvUsuarios.DataBind();
//gdvUsuarios.Columns[0].HeaderText = "Nome Usuário";
//gdvUsuarios.Columns[1].HeaderText = "E-mail";
//gdvUsuarios.Columns[2].HeaderText = "Bloqueado";
//gdvUsuarios.Columns[3].HeaderText = "Último Login";
//gdvUsuarios.Columns[4].HeaderText = "Administrador";

Установка значений, изменяющих заголовок DataTable, не работает, и после DataBind свойство Columns.Count для DataGridView возвращает нулевые столбцы! После выполнения кода все выглядит нормально на моей странице asp, но подписи неверны. Что я делаю не так?
Tks

Ответы [ 3 ]

1 голос
/ 23 августа 2010

Я думал, что выкопал достаточно, но, видимо, недостаточно.Ответ, который я нашел здесь: Любой способ манипулирования столбцами в GridView с AutoGenerateColumns = true?

Ниже приведен код:

public partial class admin_CadUsuarios : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        DataTable dtUsuarios = DBManager.RunSqlGetDataTable(
          @"select b.UserName, c.Email, c.IsLockedOut, c.LastLoginDate, 
              case 
                when e.RoleName is not null then 1
                else 0 end Admin
            from dbo.aspnet_Applications a join dbo.aspnet_Users b
              on a.ApplicationId = b.ApplicationId
            join dbo.aspnet_Membership c
              on b.ApplicationId = c.ApplicationId
              and b.UserId = c.UserId
            left join dbo.aspnet_UsersInRoles d
              on d.UserId = b.UserId
            left join dbo.aspnet_Roles e
              on d.RoleId = e.RoleId
            where a.ApplicationName = 'Mont Blanc Catalogo'");
        DataView dvUsuarios = new DataView(dtUsuarios) { Sort = "UserName" };
        gdvUsuarios.DataSource = dvUsuarios;
        gdvUsuarios.DataBind();
    }

    protected void gdvUsuarios_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.Header)
        {
            e.Row.Cells[0].Text = "Nome Usuário";
            e.Row.Cells[1].Text = "E-mail";
            e.Row.Cells[2].Text = "Bloqueado";
            e.Row.Cells[3].Text = "Último Login";
            e.Row.Cells[4].Text = "Administrador";
        }
    }
}

RowDataBound сделалобмануть.

0 голосов
/ 23 августа 2010

Если вы хотите переименовать столбцы в DataTable, просто сделайте (ColumnName вместо Caption):

dtUsuarios.Columns["UserName"].ColumnName= "Nome Usuário"

Если вы хотите изменить вывод, который вы отображаете для пользователя, вы, вероятно, захотите сделать это в разметке. Если это GridView, укажите HeaderText в BoundColumn

0 голосов
/ 23 августа 2010

Вы можете попробовать использовать псевдонимы столбцов, в зависимости, конечно, от вашего конкретного приложения / версии sql.

DataTable dtUsuarios = DBManager.RunSqlGetDataTable( 
@"select 
  b.UserName [Nome Usuário], 
  c.Email [E-mail], 
  c.IsLockedOut [Bloqueado], 
  c.LastLoginDate [Último Login],  
  case  
    when e.RoleName is not null then 1 
    else 0 end [Administrador] 
from dbo.aspnet_Applications a join dbo.aspnet_Users b 
  on a.ApplicationId = b.ApplicationId 
join dbo.aspnet_Membership c 
  on b.ApplicationId = c.ApplicationId 
  and b.UserId = c.UserId 
left join dbo.aspnet_UsersInRoles d 
  on d.UserId = b.UserId 
left join dbo.aspnet_Roles e 
  on d.RoleId = e.RoleId 
where a.ApplicationName = 'Mont Blanc Catalogo'"); 

DataView dvUsuarios = new DataView(dtUsuarios) { Sort = "[Nome Usuário]" }; 
gdvUsuarios.DataSource = dvUsuarios; 
gdvUsuarios.DataBind(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...