2012-07-04 36 views
40

Tôi chỉ muốn sử dụng số DataGridView để hiển thị mọi thứ và tôi muốn người dùng không thể chọn bất kỳ hàng, trường hoặc bất kỳ thứ gì từ DataGridView.Làm thế nào để vô hiệu hóa khả năng chọn trong một DataGridView?

Tôi làm cách nào để thực hiện việc này?

+1

Không có khả năng chọn thực sự là thiết kế giao diện người dùng xấu (rất khó chịu cho người sử dụng). Điều gì sẽ xảy ra nếu người dùng muốn sao chép nội dung nào đó từ báo cáo của bạn? Tôi nghĩ rằng chỉ đọc sẽ đủ (như được mô tả trong câu trả lời dưới đây). – banging

Trả lời

1

Sử dụng DataGridView.ReadOnly property

Mã trong MSDN example minh họa việc sử dụng các tài sản này trong DataGridView kiểm soát thiết kế chủ yếu để trưng bày. Trong ví dụ này, giao diện trực quan của điều khiển được tùy chỉnh theo nhiều cách và điều khiển được định cấu hình cho tương tác giới hạn.

Quan sát các thiết lập trong các mã mẫu:

// Set property values appropriate for read-only 
// display and limited interactivity 
dataGridView1.AllowUserToAddRows = false; 
dataGridView1.AllowUserToDeleteRows = false; 
dataGridView1.AllowUserToOrderColumns = true; 
dataGridView1.ReadOnly = true; 
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; 
dataGridView1.MultiSelect = false; 
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None; 
dataGridView1.AllowUserToResizeColumns = false; 
dataGridView1.ColumnHeadersHeightSizeMode = 
DataGridViewColumnHeadersHeightSizeMode.DisableResizing; 
dataGridView1.AllowUserToResizeRows = false; 
dataGridView1.RowHeadersWidthSizeMode = 
DataGridViewRowHeadersWidthSizeMode.DisableResizing; 
+2

Nếu tôi có thể bỏ phiếu tôi sẽ làm. Chưa đủ đại diện. Tuy nhiên chỉ đọc không có gì để ngăn người dùng chọn một ô. – JSON

+0

@JSON - Đừng bỏ phiếu bầu lên hoặc xuống. Sẽ là tuyệt vời để có một giải pháp thay vì từ nơi cộng đồng có thể học hỏi. –

2

tôi cố định này bằng cách thiết lập Enabled tài sản để false.

+5

chưa được kiểm tra, nhưng tôi cho rằng bạn mất một số hiệu ứng hình ảnh nếu bạn vô hiệu hóa một datagridview. –

+0

Để chắc chắn hoạt động nhưng như @MahdiTahsildari cho biết bạn sẽ nhận được giao diện màu xám. – C4u

+0

Lưu ý: Sau đó, bạn cũng không có các sự kiện như DoubleClick sẵn có – SenioreT

91

Tôi muốn đi với điều này:

private void myDataGridView_SelectionChanged(Object sender, EventArgs e) 
{ 
    dgvSomeDataGridView.ClearSelection(); 
} 

Tôi không đồng ý với sự khẳng định rằng không rộng DataGridView nên unselectable. Một số giao diện người dùng được xây dựng cho các công cụ hoặc màn hình cảm ứng và cho phép lựa chọn đánh lừa người dùng nghĩ rằng việc chọn sẽ thực sự đưa họ đến một nơi nào đó.

Đặt ReadOnly = true trên điều khiển không ảnh hưởng đến việc liệu một ô hoặc hàng có thể được chọn. Và có những nhược điểm hình ảnh và chức năng để thiết lập Enabled = false.

Một tùy chọn khác là đặt màu kiểm soát được chọn để chính xác màu không được chọn, nhưng nếu bạn đang thao tác với màu sau của ô, thì phương pháp này cũng mang lại một số kết quả khó chịu.

+0

Câu hỏi "Làm cách nào để thay đổi màu nền của hàng được chọn nền dữ liệu đã chọn?" mô tả cách thiết lập màu nền và nền trước cho hàng đã chọn: Question
Điều này hiệu quả với tôi. – user1036944

+0

Hmm .. Tôi tự hỏi nếu tất cả các câu trả lời mã VB.NET được chỉnh sửa thành C# .... – edhubbell

+0

Điều này là tốt hơn :) –

1

tôi tìm thấy thiết lập tất cả các thuộc tính AllowUser... để false, ReadOnly để true, RowHeadersVisible-false, ScollBars-None, sau đó faking the prevention of selection làm việc tốt nhất cho tôi. Không đặt Enabled thành false vẫn cho phép người dùng sao chép dữ liệu từ lưới.

Các mã sau đây cũng dọn dẹp giao diện khi bạn muốn có một lưới hiển thị đơn giản (hàng giả là cùng một chiều cao):

int width = 0; 
for (int i = 0; i < dataGridView1.Columns.Count; i++) 
{ 
    width += dataGridView1.Columns[i].Width; 
} 

dataGridView1.Width = width; 
dataGridView1.Height = dataGridView1.Rows[0].Height*(dataGridView1.Rows.Count+1); 
9

Bạn có thể thiết lập một màu nền trong suốt cho các ô được chọn như sau:

DataGridView.RowsDefaultCellStyle.SelectionBackColor = System.Drawing.Color.Transparent; 
1

này làm việc cho tôi như một say mê:

row.DataGridView.Enabled = false; 

row.DefaultCellStyle.BackColor = Color.LightGray; 

row.DefaultCellStyle.ForeColor = Color.DarkGray; 

(nơi row = DataGridView.NewRow (quá tải thích hợp);)

1

Enabled tài sản để false

hoặc

this.dataGridView1.DefaultCellStyle.SelectionBackColor = this.dataGridView1.DefaultCellStyle.BackColor; 
this.dataGridView1.DefaultCellStyle.SelectionForeColor = this.dataGridView1.DefaultCellStyle.ForeColor; 
Các vấn đề liên quan