2012-11-23 45 views
9

Tôi đang cố gắng tự động điều chỉnh độ cao của hàng và tôi thấy nó rất khó khăn.Hàng của Datagridview tự động hóa

tôi đã thiết khách sạn này:

DataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells. 

Tôi cũng đã thực hiện nó sử dụng phương pháp khác này:

DataGridView.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders) 

Và cũng từng hàng, bằng cách sử dụng này:

DataGridView.AutoResizeRow(i, DataGridViewAutoSizeRowMode.AllCells) 

Và thậm chí còn mã hóa độ cao của hàng với một giá trị lớn và không hoạt động được !! Tất cả các hàng được hiển thị với chiều cao mặc định của chúng.

Không có cách nào trong số này hoạt động. Tôi đang hết các lựa chọn.

Hầu hết các hàng trong chế độ xem dữ liệu không cần phải đổi kích thước. Nhưng một trong số đó chứa đầy các giá trị như sau:

"a" + "\ n" + b + "\ n" + "c" + "\ n" + "d" + "\ n" + " e "

Ý tôi là, các giá trị ngắn nhưng ở các dòng khác nhau. Tôi phải cho họ thấy những dòng khác nhau, không thể cho họ thấy tất cả. Nhưng chế độ xem dữ liệu chỉ hiển thị cái đầu tiên và tất cả những cái khác bị ẩn, vì hàng không tự động hóa.

Bất kỳ ý tưởng nào về bất kỳ cách nào khác để thực hiện điều đó.

Trả lời

3

Tôi đã tìm ra giải pháp cho vấn đề này. Thay vì làm việc với các thuộc tính autosize của lưới hoặc các hàng, tôi nên sử dụng wrapmode để áp dụng cho tất cả các ô của lưới.

DataGridView.DefaultCellStyle.WrapMode = DataGridViewTriState.True

Điều này được áp dụng cho tất cả các ô và hoạt động.

+0

Rất vui vì bạn đã tìm thấy giải pháp (tôi cho là bạn đã thiết lập wrapmode đã và đang thấy nhiều dòng tràn vùng ô lưới). Tôi sẽ để lại câu trả lời của tôi vì nó là chính xác cho một vấn đề khác nhau (nếu bạn cập nhật bất kỳ tế bào của bạn tăng chiều dài của dữ liệu, thay đổi kích thước sẽ không kích hoạt tự động). –

+2

Oh - và đánh dấu phần này làm câu trả lời để câu hỏi sẽ rơi ra khỏi danh sách chưa được trả lời. –

5

Bạn cần gọi phương thức thay đổi kích thước sau dữ liệu đã được thay đổi. Từ bài viết MSDN trên DataGridView.AutoResizeRows():

Chiều cao hàng chỉ được điều chỉnh một lần cho mỗi cuộc gọi phương pháp; nếu nội dung của các hàng sau đó thay đổi, các hàng sẽ không tự động điều chỉnh.

Điều này có nghĩa là bạn cần gọi phương thức sau lần tải đầu tiên và bất kỳ lần tải lưới tiếp theo nào. Nếu bạn đang gọi mã này trong bộ điều khiển của biểu mẫu gốc, dữ liệu chưa được thực hiện để dữ liệu không có ở đó.

Đối với việc tải đầu tiên sử dụng sự kiện DataBindingComplete:

dataGridView1.DataBindingComplete += new 
    DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete); 

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells); 
} 

Để cập nhật sau cho các tế bào, bạn sẽ cần phải tìm nơi tốt nhất cho mình.

+0

Lý do khiến phương pháp tiếp cận hiện tại của bạn không hoạt động có khả năng là bạn có mã của mình bên trong hàm tạo biểu mẫu hoặc sự kiện onload. –

+0

Không, tôi thực sự làm điều đó sau khi nguồn cấp dữ liệu đã được đặt thành datagridview. Nó đã được phổ biến. Đó là điều cuối cùng tôi làm. – monican

+0

@ user1062568 khi nào bạn làm điều đó? Trong xử lý sự kiện nào? ngay cả khi bạn làm điều đó sau khi nguồn đã được thiết lập, đó là không đủ, bạn phải làm điều đó sau khi databinding hoàn tất. Nếu bạn thiết lập nguồn và sau đó gọi thay đổi kích cỡ tất cả trong hàm tạo mẫu, ví dụ, điều này sẽ không thay đổi chiều cao. –

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