2010-02-22 29 views
9

trong một biểu mẫu của tôi một dữ liệu hiển thị dữ liệu từ cơ sở dữ liệu (tất nhiên số lượng dữ liệu (số lượng hàng) có thể thay đổi). Kết nối cơ sở dữ liệu nằm trong sự kiện tải biểu mẫu. Tôi chỉ không thể tìm ra cách chiều cao của toàn bộ datagridview được tự động, tùy thuộc vào số hàng nó hiển thị.winforms: datagridview: height (autosize) tùy thuộc vào số hàng

Trả lời

4

Nếu bạn đặt DataGridView.AutoSize == true thì khi bạn thêm nhiều hàng, lưới sẽ dài hơn. Nếu không, bạn sẽ nhận được thanh cuộn. Trừ khi bạn đã đặt ScrollBars == Null || Ngang, trong trường hợp các hàng chỉ biến mất của phần cuối.

Vì một số lý do, DataGridView.AutoSize chỉ có thể được đặt theo chương trình. Và có một số hành vi kỳ lạ có thể quan sát được khi bạn đặt lưới bên trong một điều khiển tự động. Nó dường như không đáp ứng với kích thước của lưới điện.

Tôi đã kết thúc tính toán kích thước lưới dự kiến ​​từ cột, hàng, tiêu đề, lề, đệm và kích thước đường viền, sau đó định kích thước điều khiển chứa lưới và neo lưới trên bốn mặt. Cảm thấy thực sự clunky nhưng nó là tốt nhất tôi có thể đến với. Nếu bạn vẫn còn xung quanh, bình luận và tôi sẽ xem nếu tôi có thể tìm thấy mã, tôi không có nó trên tay.

9

Đây là những gì tôi cố gắng tìm kiếm, và nó chạy tốt cho đến nay:

int GetDataGridViewHeight(DataGridView dataGridView) 
{ 
    var sum = (dataGridView.ColumnHeadersVisible ? dataGridView.ColumnHeadersHeight : 0) + 
       dataGridView.Rows.OfType<DataGridViewRow>().Where(r => r.Visible).Sum(r => r.Height); 

    return sum; 
} 

Nhờ vậy, tôi gói gọn DataGridView của tôi trong một UserControl vì vậy tôi có thể thực hiện AutoSize một cách chính xác:

// This is in a user control where the datagrid is inside (Top docked) 
protected override void OnResize(EventArgs e) 
{ 
    if (AutoSize) 
    { 
     var height = this.GetDataGridViewHeight(this.dataBoxGridView); 
     this.dataBoxGridView.Height = height; 
     this.Height = height +this.Padding.Top + this.Padding.Bottom; 
    } 
} 

Tôi chưa thử tạo điều khiển tùy chỉnh trực tiếp từ DataGridView để triển khai điều này.

+0

Điều này làm việc cho tôi, nhưng tôi phải đặt dấu ngoặc đơn quanh biểu thức trên cùng, trước dấu +. Tôi tin rằng đây là vấn đề "trật tự hoạt động" với toán tử? /:. –

+0

Điểm tốt. Tôi đã thêm dấu ngoặc đơn để phân biệt bất kỳ nghi ngờ nào về ưu tiên vận hành khéo léo này. – Larry

0

Đây là cách tôi đã làm. để thiết lập chiều cao của DataGridView bạn có thể sử dụng tính năng Set Height.On form load của nó, bạn có thể sử dụng mã này để ẩn datagridview. dataGridViewName.Height = 0;

Sau đó, trong khi tìm nạp Hàng từ Cơ sở dữ liệu. chúng tôi có thể sử dụng phương pháp dưới đây để có được datagridview Chiều cao theo số hàng.

private int dataGridViewHeight() 
    { 
     int sum = this.dataGridViewName.ColumnHeadersHeight; 

     foreach (DataGridViewRow row in this.dataGridViewName.Rows) 
      sum += row.Height + 1; // I dont think the height property includes the cell border size, so + 1 

     return sum; 
    } 
Các vấn đề liên quan