2010-11-16 66 views
7

我有一個datagridview停靠和錨定與Winform面板。當我調整窗體大小時,datagridview按預期調整大小,但列不調整大小以適應datagridview。相反,我留下了Datagridview的背景顏色。c#調整datagridview列以適應控制

如何獲得與控件一起增長的列?

謝謝。

回答

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

謝謝。我已經使用了事件,它工作正常。 – 2010-11-16 12:50:53

10

您可以設置其中一列的AutoSizeMode屬性爲Fill。然後,此列將自行調整大小以填充其他列未使用的所有可用空間。

11

你總是可以使用AutoSizeColumnsMode財產

這個屬性可以配置的控制,使列寬度自動調整以填補控制或者以適應單元格的內容。只要控件的寬度發生變化,大小調整就會在填充模式下進行。

MSDN頁面上有很多關於此的信息。