2010-08-10 3 views
3

기본적으로 DataGrid의 ItemSource 속성을 사용하여 제네릭 목록을 내 DataGrid에 바인딩합니다. 정말 제목을 변경하려면 그러나, 나는 다음을 시도하지만 런타임 예외 얻을 : 그리드가 이미있는 경우WPF - 데이터 바인딩 된 DataGrid의 열 이름 변경

public void yourDataGrid_OnItemDataBound(object s, DataGridItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Header) 
    { 
     // Change the cell index to the column index you want... I just used 0 
     e.Item.Cells[0].Text = "Text you want in header."; 
    } 
} 

:

dgtest.Columns[1].Header = "edited"; 

답변

3

당신은 ItemDataBound 이벤트를 변경할 수 있습니다 바운드 할 수 있어야합니다 :

yourDataGrid.Columns[0].Header = "Text you want in header."; 

바운드되기 전에 텍스트를 변경하려고하므로 아마도 오류가 발생합니다. 변경 열 이름

datagrid1.AutoGeneratedColumns += datagrid1_AutoGeneratedColumns; 

void datagrid1_AutoGeneratedColumns(object sender, EventArgs e) 
{ 
    datagrid1.Columns[0].Header = "New Column Name"; 
} 
3

AutoGeneratedColumns 이벤트는 내 열 이름을 설정 AutoGeneratingColumn 이벤트와 속성을 사용했다. 먼저 속성 클래스를 만들

은 ...

public class ColumnNameAttribute : System.Attribute 
    { 
     public ColumnNameAttribute(string Name) { this.Name = Name; } 
     public string Name { get; set; } 
    } 

은 그 때 나는
public class Test 
    { 
     [ColumnName("User Name")] 
     public string Name { get; set; } 
     [ColumnName("User Id")] 
     public string UserID { get; set; } 
    } 

는 그럼 난 내 AutoGeneratingColumn 이벤트 핸들러를 작성 ... 새 속성 내 데이터 클래스 멤버를 장식 ...

void dgPrimaryGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
    { 
     var desc = e.PropertyDescriptor as PropertyDescriptor; 
     var att = desc.Attributes[typeof(ColumnNameAttribute)] as ColumnNameAttribute; 
     if(att != null) 
     { 
      e.Column.Header = att.Name; 
     } 
    } 

... 그리고 내 그리드 및 테스트에 첨부 ...

 dgPrimaryGrid.AutoGeneratingColumn += dgPrimaryGrid_AutoGeneratingColumn; 

     var data = new object[] 
     { 
      new Test() { Name = "Joe", UserID = "1" } 
     }; 
     dgPrimaryGrid.ItemsSource = data; 

다음은 그 모습입니다. 열 이름은 속성 이름이 아닙니다 (기본 동작).

A DataGrid with Columns Renamed

이 방법은 좀 더 많은 작업이지만, 열이 바운드 열 같은 장소에서 정의 표제를 가지고하는 것이 좋다. 열 이름을 수정하기 위해 다른 곳으로 갈 필요없이 열의 순서를 바꿀 수 있습니다.

10

에 대한 WPF에