2012-03-05 2 views
4

にそれを設定した後、私は私のC#プロジェクトでのDataGridViewの次のプロパティを設定しています...DataGridViewのヘッダーアライメントさえMiddleCenter

sampleDataGridView.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; 
sampleDataGridView.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; 

しかし、私は、ヘッダーの見出しの(つまり、テキストことに気付きますセルは、この原因することができますどのような...しかし...何らかの理由で、少し左に

を中央に完全にあるデータ行の配置をオフセットさ?

答えて

1

私はあなたと同じ問題を抱えていたし、それだと思われますフレームワークの問題:MS Connect

+0

私は知っていますが、私は同じことを知っていますが、まだ修正されていません... –

6

DataGridViewが並べ替え順序を示すスペースを予約する並べ替えグリフ(小さな矢印)があるからです。ソートグリフを無効にするには、列のSortModeをNotSortableに設定し、テキストを中央揃えにします。

0

refectionとを抑圧せず、グリフ幅を見つけ出す際にラインのうち:私はオンに次のコードに

と列ヘッダーのテキスト幅に列幅をautoadjustingながらソーティングオフ。ソートのオン/オフの幅の違いは、列ソートグリフで使用される幅を示します。

列の幅が自動調整幅よりも小さく設定されているときに列がグリフを失うので、左右の列の左右対称のパッドを挿入することで抑制します。

また、widthを設定しているときに幅イベントをオンまたはオフにするために、datagridviewインスタンスによってColumnWidthイベントを格納する辞書を使用します。

この狂ったコードは、最初の列幅の自動調整と、ユーザーが列幅をドラッグしたときの列ヘッダーのパディングの管理の両方を呼び出します。

void AdaptColumnHeaderText(DataGridViewColumn column, bool autoSize=false) 
{ 

    //Supress column width events 
    if (dataGridViewColumnWidthEventHandlers.ContainsKey(column.DataGridView)) 
    { 
     dataGridView1.ColumnWidthChanged -= dataGridViewColumnWidthEventHandlers[column.DataGridView]; 
    } 

    //Save initial column with as preferred 
    var w_preferred = column.Width; 

    if (
      column.SortMode.Equals(DataGridViewColumnSortMode.Automatic) && 
      column.HeaderCell.Style.Alignment.Equals(DataGridViewContentAlignment.MiddleCenter)) 
    { 
     //remove all header padding 
     column.HeaderCell.Style.Padding = new Padding(0, 0, 0, 0); 

     //Fit column width to header text with AND sort glyph 
     column.AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader; 

     //save column width sort enabled 
     var w_sort = column.Width; 

     //Fit column width to header text with NO sort glyph 
     column.SortMode = DataGridViewColumnSortMode.NotSortable; 

     //save column width when sort disable 
     var w_nosort = column.Width; 

     //Calculate width consumed by sort glyph 
     var w_glyph = w_sort - w_nosort; 

     //Nominal column width if glyph width applied left and right of header text 
     var w_nominal = w_glyph + w_nosort + w_glyph; 

     //Disable column width autosize 
     column.AutoSizeMode = DataGridViewAutoSizeColumnMode.None; 

     //Enable column autosorting 
     column.SortMode = DataGridViewColumnSortMode.Automatic; 

     //If autosize option - ignore preferred width and set to nominal 
     if (autoSize) 
     { 
      w_preferred = w_nominal;  
     } 

     //Pad depending on final column width 
     if (w_preferred >= w_nominal) 
     { 
      //Preferred width greater than nominal - pad left of text to balance width used by glyph 
      column.HeaderCell.Style.Padding = new Padding(w_glyph, 0, 0, 0); 
     } 
     else 
     { 
      //Two symetric glyphs will not fit - pad left and right to supress glyph 
      w_glyph = (w_preferred - w_nosort)/2; 
      column.HeaderCell.Style.Padding = new Padding(w_glyph, 0, w_glyph, 0); 
     } 
     column.Width = w_preferred; 

     Console.WriteLine("name:{0}, glyph:{1}, w_preferred:{2}", column.Name, w_glyph, w_preferred); 
    } 

    //re-enable column width events 
    if (dataGridViewColumnWidthEventHandlers.ContainsKey(column.DataGridView)) 
    { 
     dataGridView1.ColumnWidthChanged += dataGridViewColumnWidthEventHandlers[column.DataGridView]; 
    } 


} 
関連する問題