2015-03-23 5 views
0

У меня есть немного функции петли, которая изменяет размер столбцов на основе ширины текста столбца заголовка:Ширина «подушки» на заголовке столбца?

var columns = VView.gridViewCblID.Columns; 

foreach (DataGridViewColumn clm in columns) 
{ 
    VView.lblDummy.Text = clm.HeaderText; 
    if (clm.Width > VView.lblDummy.Width && clm.Width <= 100) 
    { 
     clm.Width = VView.lblDummy.Width; 
    } 
} 

Тем не менее, из-за «подушку», которая автоматически применяется к слева от HeaderText колонке , столбцы получить «сгруппированный» вид:

enter image description here

Какова фактическая ширина этой подушки, так что я могу применить его к методу? То есть

clm.Width = VView.lblDummy.Width + (cushion *2); 
+0

Как насчет 'dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.ColumnHeader'? – Loathing

+0

@Loathing Я делаю это как часть метода, который изменит размер столбца в зависимости от текущей ширины после 'AutoResize'. Я только хочу изменить размеры определенных столбцов. – Ben

+1

Вы можете установить его в определенных столбцах, см. Ответ ниже. – Loathing

ответ

2

Можно использовать AutoSizeColumnsMode, чтобы сделать работу для вас, а затем установить режим изменения обратно в ручной режим. Например.

DataGridView dgv = new DataGridView() { Dock = DockStyle.Fill }; 
dgv.Columns.Add("Cable Number", "Cable Number"); 
dgv.Columns.Add("Type", "Type"); 
dgv.Columns.Add("Length", "Length"); 

dgv.Columns["Type"].AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader; 

Form f = new Form(); 
f.Controls.Add(dgv); 
dgv.HandleCreated += delegate { 
    dgv.BeginInvoke((Action) delegate { 
     var c = dgv.Columns["Type"]; 
     int w = c.Width; 
     c.Width = w; // set current width, otherwise DGV reverts to previous 100 width 
     c.AutoSizeMode = DataGridViewAutoSizeColumnMode.None; 
    }); 
}; 
Смежные вопросы