2012-07-26 21 views
5

我有一個DataGridView,它顯示有限的行數,從不超過5個。這個DataGridView被放置在一個DataRepeater控件上,所以它通常顯示很多在屏幕上的時間。我想要實現的是,所有網格都調整爲其內容的大小,因此如果其中有4個或5個項目,則它們不顯示滾動條,或者如果只有1個或2個項目存在,則會佔用額外的垂直空間。如何垂直自動調整winforms datagridview控件的大小,使其行始終可見

網格只包含文本數據。它們是數據綁定控件,所以如果底層數據源發生變化,他們需要調整大小(我猜DataBindingComplete事件會合適)。

我該如何做到這一點?計數行是最好的選擇?提前致謝。

+0

這裏是一個更準確的答案[DataGridView的自動高度 - 如何自動調整大小DataGridView的高度(http://stackoverflow.com/questions/38816425/datagridview-auto-height-how-to-autosize-datagridview -高度) – 2016-08-07 20:10:37

回答

13

因爲你的控制是數據綁定,我會在DataBindingComplete事件上的DataGridView設置Height屬性的行的高度的總和(加上一些餘量):

private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    var height = 40; 
    foreach (DataGridViewRow dr in dataGridView1.Rows) { 
     height += dr.Height; 
    } 

    dataGridView1.Height = height; 
} 
0

此值可做任何事情。您應該在網格中測試以發現設置高度的最佳值。

var height = 40; 

編輯:

爲了找到真正的價值高度,你需要添加網格和高度頭位置。類似的東西。

int height = dgv.Location.Y + dgv.ColumnHeadersHeight; 
foreach (DataGridViewRow dr in dgv.Rows) { 
    height += dr.Height; // Row height. 
} 
dgv.Height = height; 
0

我拿了hmqcnoesy的回答,並對其進行了擴展並創建了一個函數來包含寬度。並在任何網格上使用。

注意:在網格上設置AutoSizeCells = AllCells。

public static DataGridView SetGridHeightWidth(DataGridView grd, int maxHeight, int maxWidth) 
    { 
     var height = 40; 
     foreach (DataGridViewRow row in grd.Rows) 
     { 
      if(row.Visible) 
       height += row.Height; 
     } 

     if (height > maxHeight) 
      height = maxHeight; 

     grd.Height = height; 

     var width = 60; 
     foreach (DataGridViewColumn col in grd.Columns) 
     { 
      if (col.Visible) 
       width += col.Width; 
     } 

     if (width > maxWidth) 
      width = maxWidth; 

     grd.Width = width; 

     return grd; 
    } 
相關問題