2010-11-16 35 views
7

Winformda bir panelle sabitlenmiş ve sabitlenmiş bir datagridview var. Formu yeniden boyutlandırdığımda, datagridview beklendiği gibi yeniden boyutlandırılır, ancak sütunlar datagridview'a sığacak şekilde yeniden boyutlandırılmaz. Bunun yerine, Datagridview'in arka plan rengiyle kaldım.C# denetime uydurmak için datagridview sütunlarını yeniden boyutlandırma

Sütunları kontrol ile büyümek için nasıl alabilirim?

Teşekkürler.

cevap

6
private void dataGrid_SizeChanged(object sender, EventArgs e) 
{ 
    ResizeGridColumns(); 
} 

private void ResizeGridColumns() 
{ 
    //get sum of non-resizable columns width 
    int diffWidth = 0; 
    foreach (DataGridViewColumn col in this.dataGrid.Columns) 
    { 
     if (col.Resizable == DataGridViewTriState.False && col.Visible) diffWidth += col.Width; 
    } 

    //calculate available width 
    int totalResizableWith = this.dataGrid.Width - diffWidth; 

    //resize column width based on previous proportions 
    this.dataGrid.ColumnWidthChanged -= new DataGridViewColumnEventHandler(dataGrid_ColumnWidthChanged); 
    for (int i = 0; i < this.colWidthRaport.Count; i++) 
    { 
     try 
     { 
      if (this.dataGrid.Columns[i].Resizable != DataGridViewTriState.False && this.dataGrid.Columns[i].Visible) 
      { 
       this.dataGrid.Columns[i].Width = (int)Math.Floor((decimal)totalResizableWith/this.colWidthRaport[i]); 
      } 
     } 
     catch { } 
    } 
    this.dataGrid.ColumnWidthChanged += new DataGridViewColumnEventHandler(dataGrid_ColumnWidthChanged); 
} 

private void dataGrid_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e) 
{ 
    CalculateGridColWidthsRaport(); 
} 

/// <summary>Calculates the proportions between grid width and column width</summary> 
private void CalculateGridColWidthsRaport() 
{ 
    //get sum of non-resizable columns width 
    int diffWidth = 0; 
    int colWidthsSum = 0; 
    foreach (DataGridViewColumn col in this.dataGrid.Columns) 
    { 
     if (col.Visible) 
     { 
      colWidthsSum += col.Width; 
      if (col.Resizable == DataGridViewTriState.False) diffWidth += col.Width; 
     } 
    } 
    colWidthsSum += 24; 

    //calculate available with 
    int totalResizableWith = colWidthsSum - diffWidth;// this.dataGrid.Width - diffWidth; 
    if (this.ParentForm.WindowState == FormWindowState.Maximized) 
    { 
     totalResizableWith = this.dataGrid.Width - diffWidth; 
    } 

    //calculate proportions of each column relative to the available width 
    this.colWidthRaport = new List<decimal>(); 
    foreach (DataGridViewColumn col in this.dataGrid.Columns) 
    { 
     this.colWidthRaport.Add((decimal)totalResizableWith/(decimal)col.Width); 
    } 
} 
+0

Teşekkürler. Olayları kullandım ve gayet iyi çalışıyor. –

10

Sen Fill olmak sütunlardan birinin AutoSizeMode özelliğini ayarlayabilirsiniz. Daha sonra bu sütun, diğer sütunlar tarafından kullanılmayan tüm boş alanı doldurmak için kendini her zaman yeniden boyutlandıracaktır.

11

Hep AutoSizeColumnsMode, tesisi

Bu özellik o sütun genişlikleri otomatik olarak kontrol doldurmak için veya hücre içeriğini sığacak şekilde ayarlanır böylece kontrol yapılandırmanızı sağlar kullanabilirsiniz. Kontrolün genişliği değiştiğinde dolgu modunda boyut ayarlamaları gerçekleşir.

Bunun için MSDN sayfasında daha fazla bilgi var.

İlgili konular