2012-07-26 19 views
5

Tôi có một số hàng có giới hạn, không bao giờ lớn hơn 5. Điều này DataGridView được đặt trên điều khiển DataRepeater để nó thường được hiển thị nhiều lần trên màn hình. Những gì tôi muốn đạt được là tất cả các lưới được thay đổi kích thước nội dung của chúng để chúng không hiển thị thanh cuộn nếu 4 hoặc 5 mục nằm trong chúng hoặc chiếm thêm không gian dọc nếu chỉ có 1 hoặc 2 mục ở đó.Làm thế nào để tự động theo chiều dọc kích thước một điều khiển datagridview winforms, để các hàng của nó luôn hiển thị

Lưới chỉ chứa dữ liệu văn bản. Chúng là các điều khiển ràng buộc dữ liệu, do đó, chúng sẽ cần phải thay đổi kích thước nếu nguồn dữ liệu cơ bản thay đổi (tôi đoán sự kiện DataBindingComplete sẽ phù hợp).

Làm cách nào để đạt được điều này? Đang đếm hàng là lựa chọn tốt nhất? Cảm ơn trước.

+0

Đây là một câu trả lời chính xác hơn [DataGridView Auto Height - Làm thế nào để AutoSize DataGridView Chiều cao] (http://stackoverflow.com/questions/38816425/datagridview-auto-height-how-to-autosize-datagridview -Chiều cao) –

Trả lời

13

Kể từ kiểm soát của bạn là dữ liệu ràng buộc, tôi sẽ thiết lập các Height tài sản trên DataGridView với tổng chiều cao của hàng của mình (cộng với một số margin) trong trường hợp DataBindingComplete:

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

    dataGridView1.Height = height; 
} 
0

Giá trị này có thể là bất cứ điều gì. Bạn nên kiểm tra trong lưới của mình để khám phá giá trị tốt nhất để đặt chiều cao là gì.

var height = 40; 

được sửa đổi:

Để tìm giá trị thực sự cho chiều cao, bạn cần thêm vị trí lướichiều cao của tiêu đề. Một cái gì đó như thế.

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

Tôi lấy câu trả lời của hmqcnoesy và mở rộng trên đó và tạo chức năng cũng bao gồm chiều rộng. Và để sử dụng trên bất kỳ lưới điện nào.

Lưu ý: Đặt AutoSizeCells = AllCells trên lưới.

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; 
    }