2010-11-16 122 views
7

Tôi có một chế độ xem dữ liệu được gắn và được neo với một bảng điều khiển trên một Biểu mẫu. Khi tôi thay đổi kích thước biểu mẫu, datagridview sẽ thay đổi kích thước như mong đợi, nhưng các cột không thay đổi kích thước để phù hợp với datagridview. Thay vào đó, tôi còn lại với màu nền của Datagridview.C# thay đổi kích thước cột datagridview để vừa với điều khiển

Làm cách nào để các cột có thể phát triển cùng với kiểm soát?

Cảm ơn.

Trả lời

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

Cảm ơn. Tôi đã sử dụng các sự kiện và nó hoạt động tốt. –

10

Bạn có thể đặt AutoSizeMode tài sản của một trong các cột được Fill. Sau đó, cột này sẽ luôn tự thay đổi kích thước để điền vào tất cả các không gian có sẵn không được sử dụng bởi các cột khác.

11

Bạn luôn có thể sử dụng tài sản AutoSizeColumnsMode

Thuộc tính này cho phép bạn cấu hình điều khiển sao cho độ rộng cột sẽ được tự động điều chỉnh hoặc để lấp đầy sự kiểm soát hoặc để phù hợp với nội dung di động. Điều chỉnh kích thước xảy ra ở chế độ điền bất cứ khi nào chiều rộng của điều khiển thay đổi.

Có rất nhiều thông tin khác trên trang MSDN cho việc này.

Các vấn đề liên quan