2010-12-29 4 views
11

이상한 문제가 있으며 해결 방법이 간단 할 것입니다. 그러나 많은 연구 끝에 해결책을 찾을 수없는 것 같습니다.DataGridView의 열에 머리글을 가운데 놓을 수있는 방법은 무엇입니까?

필자는 DataGridView에 열 머리글을 가운데 맞추기 위해 노력하고 있지만 그 결과는 들여 쓰기 문제와 같이 센터링의 왼쪽 바이어스입니다. 사이트 또는이 문제에 대한 몇 가지 게시물을 보았지만 해결 방법은 없습니다. 이견있는 사람?

는 여기에 현재 사용하려고 해요 문의 :

DataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter 

답변

21

당신이 게시 한 코드가 올바른 궤도에있다 : 당신이 당신의 DataGridView 제어의 ColumnHeadersDefaultCellStyle 속성을 설정해야합니다.

그러나, 당신은 새로운 DataGridViewCellStyle 클래스를 생성하고 ColumnHeadersDefaultCellStyle 속성에 을 할당해야합니다.DataGridViewCellStyle 클래스를이 속성에 할당하지 않으면 코드 샘플이 표시 될 때 Alignment 속성을 수정할 수 없습니다.

빈 프로젝트

그래서, 예를 들어, 다음 코드는 완벽하게 중심을 맞추기 열 머리글 :

Dim dgvColumnHeaderStyle As New DataGridViewCellStyle() 
dgvColumnHeaderStyle.Alignment = DataGridViewContentAlignment.MiddleCenter 

myDataGridView.ColumnHeadersDefaultCellStyle = dgvColumnHeaderStyle 

  향후 DataGridView with centered column headings


, 당신은 쉽게 이러한 유형을 찾을 수 있습니다 디자이너의 모든 것들. 코드를 통해 직접해야하는 경우, 수행 된 작업을보기 위해 생성 된 *.Designer.vb 파일을 확인할 수 있습니다.


편집 : 난 그냥 지금은 약간의 당신이의 열 -이 실제로 각 헤더의 오른쪽에 약간 통통함을 만들어 않습니다를 참조하고 오프셋 나타났습니다. 하지만 버그는 아닙니다. 훨씬 간단한 설명이 있습니다.

ListView처럼 DataGridView은 열별로 정렬을 지원합니다. 따라서 각 열 머리글은 가운데 맞춤을 계산할 때 정렬 글리프 (대개 화살표)를 표시 할 수있는 충분한 공간을 예약합니다.

열 머리글을 모두으로 중앙 정렬하려면 정렬을 사용하지 않도록 설정해야합니다. 열의 SortMode 속성을 "NonSortable"로 설정하십시오. 이렇게하면 열 텍스트가 가운데 맞춤 또는 오른쪽 정렬 될 때마다 정렬 문자 모양을위한 공간이 예약되지 않습니다. 당신은 센터 또는 열 헤더 텍스트의 다른 정렬 스타일을 사용하려면

+2

귀하의 빠른 응답 주셔서 감사합니다 사용할 수 있습니다. 내가 알아 차 렸지만 똑같은 왼쪽 편견을 얻는다는 것입니다. 각 제목은 중심에 있지 않습니다. 버그를 나타내는 것으로 보이는 몇 가지 정보를 읽으므로 각 제목에 빈 공간이 몇 개 추가되어야하지만 명확하게 열 머리글의 길이에 따라 다릅니다. 텍스트 앞에 약 2.5 %의 패딩이 추가 된 것으로 보입니다. 분명히, 그것은 해결책처럼 들리지 않습니다. 나는 이것을 몇 가지 방법으로 시도해 보았고 똑같은 것을 계속했다. 이상 하네? – Keith

+0

동의어, 2.5 %는 컬럼의 전체 너비 중 ... 누락으로 인해 혼란이 생겨서 죄송합니다. – Keith

+0

@ 키스 : 방금 당신이 말하는 것에 주목했습니다. 재밌 네요. 이전에는 그다지주의를 기울이지 않았습니다. 그리고 내 친구들은 모두 나를 강박 신경증이라고 부릅니다. 새로운 통찰력으로 내 대답을 업데이트했습니다. –

1

dgvResults.Columns("ColumnName").HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter 
관련 문제