2010-01-29 8 views
9

Tôi đã tự hỏi liệu có thể loại bỏ không gian không sử dụng (không gian màu xám) của điều khiển DataGridView trong C#. Tôi phải làm cho DataGridView chỉ hiển thị bảng trắng.DatagridView: Xóa không gian không sử dụng?

alt text http://www.timvw.be/wp-content/images/datagridview-to-excel-1.gif

Mọi đề xuất?

+0

Câu hỏi hay ... nhưng không có câu trả lời thỏa đáng !!!! :( –

+0

Hãy xem câu trả lời của tôi ở đây – Tina

+0

Liên kết hình ảnh bị hỏng –

Trả lời

2

Tôi tin rằng bạn muốn:

myDataGrid.AutoSizeColumnsMode = Fill 

EDIT: Đây chỉ là thay đổi kích thước các cột. Tôi không chắc chắn làm thế nào bạn sẽ thoát khỏi không gian màu xám hàng khác hơn là thay đổi kích thước chiều cao của lưới.

+0

Điều này sẽ không loại bỏ tất cả không gian màu xám, chỉ là khoảng trống ở bên phải của các cột.Bạn sẽ phải viết một trình xử lý cho sự kiện Resize để kích thước các hàng có thể nhìn thấy để lấp đầy lưới nếu bạn muốn hành vi đó. –

+0

Với chỉnh sửa của bạn, bạn không chính xác trong giả sử có giá trị điền cho AutoSizeRowsMode. –

+0

http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewautosizerowsmode.aspx –

5

Đặt RowsHeaderVisible tài sản để sai, bạn có thể làm điều đó từ các nhà thiết kế, trong thể loại Appearence, hoặc từ mã:

dataGridView1.RowsHeaderVisible = false; 

Để loại bỏ các hàng chỉ ở phía bên trái, như đối với phần còn lại của không gian màu xám, bạn có thể thử đặt số AutoSizeColumnsMode nói trên thành Điền, nhưng bạn vẫn sẽ có phần màu xám nhạt hơn do thiếu hàng.

Thay vì định kích thước ô để lấp đầy lưới, bạn có thể thay đổi kích thước lưới của mình để vừa với các ô. Có hay không đây là một cách tiếp cận chấp nhận được sẽ phụ thuộc vào ý định của bạn.

Ý tôi là, có thể là nếu chỉ màu của nó làm phiền bạn, việc đặt màu nền thành màu trắng sẽ thực hiện thủ thuật.

+1

Vậy ... không có giải pháp hoàn hảo nào ?? –

+0

Cảm ơn, bạn đã cứu ngày của tôi .. !! – User5590

1
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; 
+0

Lỗi: Không thể chuyển đổi hoàn toàn loại 'System.Windows.Forms.DataGridViewAutoSizeColumnMode' thành 'System.Windows.Forms.DataGridViewAutoSizeColumnsMode'. Một chuyển đổi rõ ràng tồn tại (là bạn thiếu một diễn viên?) –

+0

Bạn có thể thêm 's' sau Cột trong System.Windows.Forms.DataGridViewAutoSizeColumnMode của bạn và vấn đề sẽ được giải quyết :) – Tina

4

Tôi không tìm thấy cách đơn giản để xóa không gian "không sử dụng" hoặc xám (BackgroundColor). Tuy nhiên, một giải pháp hiệu quả đối với tôi là ẩn các đường viền của DataGridView và thay đổi màu nền của nó thành nền của điều khiển xung quanh. Về bản chất, nhận thức là không còn không gian không sử dụng nữa.

Dưới đây là một đoạn trong giả:

TableGridView = DataGridView() 
TableGridView.Width = 0 
TableGridView.Height = 0 
TableGridView.AutoSize = true 
TableGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells 
TableGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells 
TableGridView.BackgroundColor = SystemColors.ControlLightLight 
TableGridView.BorderStyle = BorderStyle.None 

Tôi đọc ở đâu đó rằng các thiết lập AutoSize không áp dụng, tuy nhiên, nó đã làm thay đổi mọi thứ cho tôi. Ví dụ này cho thấy rằng điều khiển xung quanh có màu nền của SystemColors.ControlLightLight, nhưng điều này có thể được sửa đổi theo yêu cầu.

Hãy bỏ phiếu này nếu nó giúp bạn.

+0

Được thăng hạng, nó đã giúp ... đây là gần nhất tôi nhận được cho đến nay – Jack

5

Đôi khi (đặc biệt là với winforms) cách tốt nhất là để hack:

dataGridView1.BackgroundColor = System.Drawing.SystemColors.Control; 

Tôi đã đánh cắp nó từ bài đăng này: removing the empty gray space in datagrid in c#

+0

Tác phẩm này, nhưng sau đó bạn vẫn có đường viền. Bất kỳ ý tưởng làm thế nào để loại bỏ điều đó? –

0

Vâng, tôi làm việc vất vả để tìm ra câu trả lời cho điều này trước đây nhưng trong cuối cùng nếu bạn muốn bắt chước một DataGridView trống thì câu trả lời dài là tạo ra "White" Đối tượng hình chữ nhật và sử dụng Đồ họa để lấp đầy toàn bộ lưới trên phương thức OnPaint được ghi đè.