2011-09-14 88 views
9

Tôi muốn tạo kích thước của dataGridView để vừa với kích thước của các cột và hàng. Giới thiệu về tổng chiều cao, tôi đã quản lý để phù hợp với chiều cao của cột như sau:fit dataGridView size to kích thước của hàng và cột

const int datagridLines = 30; 
s.Height = dataGridView2.Columns[0].HeaderCell.Size.Height; 
for (byte i = 0; i < datagridLines; i++) 
{ 
    dataGridView2.Rows.Add(); 
    s.Height += dataGridView2.Rows[i].Height; 
} 
dataGridView2.ClientSize = s; 

Tôi đã thử một số thứ để vừa với chiều rộng nhưng không có may mắn. Bất kỳ đề xuất?

Cảm ơn.

Trả lời

16

này nên làm việc:

int height = 0; 
foreach (DataGridViewRow row in dataGridView1.Rows) { 
    height += row.Height; 
} 
height += dataGridView1.ColumnHeadersHeight; 

int width = 0; 
foreach (DataGridViewColumn col in dataGridView1.Columns) { 
    width += col.Width; 
} 
width += dataGridView1.RowHeadersWidth; 

dataGridView1.ClientSize = new Size(width + 2, height + 2); 

Các + 2 đến widthheight giá trị này là một yếu tố lận vào tài khoản cho chiều rộng của các phần tử bên trong của DataGridView. Tôi nhớ lại nhìn thấy mã ở đâu đó sẽ cho phép bạn để có được giá trị này mà không có những con số mã hóa cứng nhưng tôi không thể tìm thấy nó ngay bây giờ.

+0

Vâng, đó là nó, cảm ơn bạn Jay! – alexxx

+0

Có thể thuộc tính Padding đóng góp vào giá trị bù trừ +2 không? Xem câu trả lời được chấp nhận của http://stackoverflow.com/questions/7193268/how-to-decrese-the-size-of-button-to-a-small-size-inside-cell-of-datagrid-view-bu/ 7198229 # comment-8785853. – TheBlastOne

+0

@TheBlastOne - Thuộc tính Padding đặt khoảng trống giữa cạnh ô và nội dung của ô. Tôi tin rằng thuộc tính DataGridViewColumn.DividerWidth có liên quan đến nó. –

0

Bạn sẽ cần phải sử dụng các thuộc tính của bộ sưu tập DataGridViewRow và bộ sưu tập DataGridViewColumn để thực hiện việc này.

Hãy thử cách tiếp cận tương tự như sử dụng trong này:

how to increase rows size in DataGridView

+0

Cảm ơn câu trả lời của bạn quá Mamta Dalal. – alexxx

8

GetRowsHeight và GetColumnsWidth phương pháp Hàng và Cột bộ sưu tập nên cung cấp cho bạn những gì bạn cần trong một cách nỗ lực:

var totalHeight = dataGridView2.Rows.GetRowsHeight(DataGridViewElementStates.None); 
var totalWidth = dataGridView2.Columns.GetColumnsWidth(DataGridViewElementStates.None); 
+0

Điều này không bao gồm chiều cao/chiều rộng của tiêu đề. – AbleArcher

+1

bạn có thể thực hiện tổng độ rộng + = dataGridView1.RowHeadersWidth; – barlop

7

hoàn chỉnh hơn Một chút phiên bản:

dataGridView.Height = dataGridView.Rows.GetRowsHeight(DataGridViewElementStates.None) + dataGridView.ColumnHeadersHeight + 2; 

dataGridView.Width = dataGridView.Columns.GetColumnsWidth(DataGridViewElementStates.None) + dataGridView.RowHeadersWidth + 2; 
+0

Vẫn chứa mã số cứng 2. – AbleArcher

+1

đáng chú ý, kết hợp tốt nhất của ticcky và jay, nhưng bạn nên xây dựng trên '2'. – barlop

+0

không hoạt động cho trường hợp này, mặc dù tôi có phương pháp không hiệu quả hoạt động http://stackoverflow.com/questions/37635932/calculate-padding-of-datagridview-when-padding-is-greater-than-two – barlop

0

Đó là một chút muộn và trong hình ảnh cơ bản, nhưng điều này làm việc cho tôi trong trường hợp người khác tìm thấy chủ đề này. Tôi đang sử dụng một datagridview cập cảng trong một tableLayoutPanel, tự động thay đổi kích thước khi biểu mẫu được thay đổi kích thước. Nó không co lại hình dạng. Tôi chỉ mới bắt đầu mẫu đơn. Hàng có thể được thêm bằng cách sử dụng cùng một kỹ thuật.

Private Sub setFormWidth() 
     Dim iTotalWidth As Integer = 0 '884 
     Dim iDisplayedWidth As Integer = 0 
     Dim r As Rectangle 
     For Each c As DataGridViewColumn In dgv_EmpList.Columns 
      If c.Visible Then 
       iTotalWidth += c.Width 
       r = dgv_EmpList.GetColumnDisplayRectangle(c.Index, True) 
       iDisplayedWidth += r.Width 
      End If 
     Next 
     Me.Width += (iTotalWidth - iDisplayedWidth) 
    End Sub 
+0

A báo giá khối là khi bạn trích dẫn một nguồn khác. Ngoài ra, trừ khi biểu mẫu của bạn là không biên giới, bạn nên sử dụng Me.ClientSize thay vào đó, vì điều đó sẽ loại trừ các đường viền (có các giá trị khác nhau trên các phiên bản Cửa sổ khác nhau). – LarsTech

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