2010-08-23 7 views
1

이것은 쉽지만 어디에서나 대답을 찾을 수 없습니다. 이전에 만든 DataGridView를 ASP.NET 웹 폼에서 동적으로 DataTable로 채우고 있지만 해당 DataGridView에 나타나는 열의 이름을 변경하려고합니다. 잘못된 작업을 파악할 수 없습니다. . 작동하지 않습니다 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"; 

및 데이터 바인딩 후, DataGridView에 반환을위한 Columns.Count 속성의 열을 0 : 아래는 코드입니다! 코드를 실행 한 후에는 모든 ASP 페이지에서 정상적으로 나타나지만 캡션이 잘못되었습니다. 내가 뭘 잘못하고 있니?
Tks

답변

1

내가 충분히 파고 있다고 여겨졌지만 분명히 충분하지 않다고 생각했습니다. 내가 여기 답 :

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가 속임수를 썼는지 : 아래 Any way to manipulate the columns in GridView with AutoGenerateColumns = true?

은 결과 코드입니다.

0

물론 특정 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(); 
+0

나는 알고있다. 이 특정 쿼리에서는 열 이름을 제어하지만 프로 시저의 경우에는 그렇지 않습니다. 코드를 통해 동적으로 수행하는 방법을 알지 못합니다. – Pascal

0

당신이 간단하게 할 (의 ColumnName 대신 캡션) 당신의 DataTable에서 열 이름을 바꾸려면 :

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

당신이 사용자에게 표시하고있는 OUPUT을 변경하려면, 당신은 아마 마크 업 안에서 그렇게하기를 원할 것입니다. GridView 인 경우 BoundColumn

+0

열 이름이 실제로 UserName이므로 열 이름을 변경하면 오류가 발생하며 캡션을 변경하고 싶습니다. – Pascal

관련 문제