2009-10-22 76 views
9

Tôi có Biểu mẫu và DataGridView. Tôi cư các DataGridView tại thời gian chạy, vì vậy tôi muốn biết làm thế nào để tôi thay đổi kích cỡ các hình thức động theo kích thước của DataGridView? Có bất kỳ loại tài sản hoặc phương pháp nào không? Hay tôi phải tự xác định kích thước và cập nhật cho phù hợp?C# Tự động đổi kích cỡ biểu mẫu thành kích thước của DataGridView

+0

Làm cách nào để "tự xác định kích thước"? Tôi chỉ cần biết có bao nhiêu điểm ảnh mà DGV "muốn". (Tôi có thể đặt các giới hạn hợp lý để ngăn mẫu không quá lớn.) – billpg

Trả lời

3

Điều khiển thông thường thích ứng với kích thước của chúng theo kích thước của biểu mẫu có chứa. Để điều chỉnh kích thước biểu mẫu của bạn thành kích thước của DataGridView, bạn do phải tự xác định kích thước và sau đó đặt kích thước của biểu mẫu để khớp, nhớ tính đến kích thước bổ sung được yêu cầu bởi dải trình đơn của biểu mẫu và/hoặc thanh công cụ, thanh trạng thái hoặc các điều khiển khác.

Trong trường hợp của bạn, có lẽ tốt nhất là không thay đổi kích thước biểu mẫu để khớp với điều khiển chế độ xem lưới. Nhiều khả năng, bạn sẽ có nhiều hàng hơn trong chế độ xem lưới của mình hơn là có thể vừa với màn hình Windows và bạn không muốn có biểu mẫu mở rộng bên dưới khu vực màn hình có thể xem. Nói chung, loại tình huống này chính xác là lý do tại sao bạn muốn có chế độ xem lưới có thể cuộn - để xem nhiều dữ liệu hơn có thể vừa với màn hình cùng một lúc.

+2

"Để điều chỉnh kích thước của biểu mẫu của bạn thành kích thước của DataGridView, bạn phải tự xác định kích thước" Có cách nào để làm điều đó không xin vui lòng? DataGridView của tôi chỉ có một vài ô và nó chỉ đọc. Thay đổi kích thước hình thức để phù hợp là không có vấn đề gì cả, ngoại trừ tôi không biết bao nhiêu điểm ảnh DGV cần. Rất cám ơn. – billpg

6

Bạn có thể tìm chiều rộng thực tế bằng cách đếm Chiều rộng cột.

Đừng quên rằng biểu mẫu của bạn có thể phức tạp hơn và bạn nên tính các điều khiển khác.

public class YourForm : Form 
{ 
    public YourForm() 
    { 
     DataGridView _dgv = new DataGridView() { Dock = DockStyle.Fill}; 
     Controls.Add(_dgv); 
    } 
    public void CorrectWindowSize() 
    { 
     int width = WinObjFunctions.CountGridWidth(_dgv); 
     ClientSize = new Size(width, ClientSize.Height); 
    } 
    DataGridView _dgv; 
} 

public static class WinObjFunctions 
{ 
    public static int CountGridWidth(DataGridView dgv) 
    { 
     int width = 0; 
     foreach (DataGridViewColumn column in dgv.Columns) 
      if (column.Visible == true) 
       width += column.Width; 
     return width += 20; 
    } 
} 
1

Tôi sẽ đi theo hướng khác và định kích thước lưới thành biểu mẫu. (một số người dùng có thể có tỷ lệ thấp) Đặt thuộc tính 'WindowState' của biểu mẫu => tối đa hóa. (tùy chọn) Đặt thuộc tính 'neo' của DGV => 'Trên cùng, Dưới, Trái, Phải'.

1

Bạn có thể sử dụng thuộc tính PreferredSize (MSDN PreferredSize entry). Đối với các điều khiển DataGridView, tôi thấy rằng chiều rộng và chiều cao ưa thích lớn hơn khoảng 20 đơn vị so với tôi mong đợi. Tôi đoán rằng điều khiển có thể tính toán kích thước ưa thích của nó khi sử dụng thanh cuộn.

Một cảnh báo khác mà tôi phát hiện là tính toán PreferredSize sẽ không chính xác ngay lập tức sau khi thêm hoặc thay đổi các mục trong bảng. Để giải quyết vấn đề này, tôi đã xử lý sự kiện RowHeadersWidthChanged.

Đây là những gì làm việc cho tôi:

class GridToy { 
    private DataGridView grid; 
    public GridToy(DataGridView dgv) { 
     grid = dgv; 
     grid.RowHeadersWidthChanged += AdjustWidth; // Event handler. 
     Layout(); 
    } 

    public void Layout() { 
     // Just do some arbitrary manipulation of the grid. 
     grid.TopLeftHeaderCell.Value = "Some Arbitrary Title"; 
    } 

    public void AdjustWidth() { 
     Control horizontal = grid.Controls[0]; // Horizontal scroll bar. 
     Control vertical = grid.Controls[1]; // Vertical scroll bar. 
     grid.Width = grid.PreferredSize.Width - vertical.Width + 1; 
     grid.Height = grid.PreferredSize.Height - horizontal.Height + 1; 
    } 
} 
+0

Tôi không chắc liệu RowHeadersWidthChanged là sự kiện tốt nhất để lắng nghe, nhưng có vẻ như để hoàn thành công việc. – amacleod

+0

Hmm. Thử nghiệm tiếp theo cho thấy 'PreferredSize' cũng tính đến chiều rộng của tiêu đề hàng, ngay cả khi' RowHeadersVisible' là sai. Có vẻ như ghép lại với nhau, tổng kích cỡ bằng tay sẽ đáng tin cậy hơn. – amacleod

-1

dataGridView1.AutoResizeColumns (DataGridViewAutoSizeColumnsMode.AllCells);

Hope this helps :)

2
int dgv_width = dataGridView1.Columns.GetColumnsWidth(DataGridViewElementStates.Visible); 
int dgv_height = dataGridView1.Rows.GetRowsHeight(DataGridViewElementStates.Visible); 
this.Width = dgv_width; 
this.Height = dgv_height; 

this.Width thay đổi kích thước chiều rộng Mẫu này.

Tất nhiên bạn phải thêm các giá trị cố định (ví dụ lề, Dạng mẫu heigth, ecc.). Với các bài kiểm tra tôi đã đạt đến giá trị làm việc cho tôi (đừng hỏi tại sao ...):

this.Width = dgv_width + 147; 
this.Height = dgv_height + 47; 
0

Bạn có thể thiết lập các tài sản "Chiều cao" để tự động theo hình thức sau phân loại hoặc sử dụng một ID và điều này nên làm điều đó ,,

Tôi vừa thử nó ..và Nó hoạt động

#form1{ 
background-color:white; 
height:auto;        
width:1500px;    
border-top:medium solid #3399FF; 
margin-top:100px; 
margin-left:30px; 
display: inline-block; 
text-align: center;     
float: none;  
} 

Tôi chỉ đặt chính xác những gì tôi đã làm trong trường hợp bạn bị lạc .. Đừng lo lắng về các thuộc tính khác có trong thiết kế của tôi.

-1

Đặt AutoSizeColumnsMode :Fill trong thuộc tính lưới

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