2010-06-04 43 views
6

Tôi có một chế độ xem dữ liệu trên biểu mẫu với một số dữ liệu. Cột 1 chứa nút để xóa hàng. Làm thế nào chúng ta có thể vô hiệu hóa nút này hoặc toàn bộ hàng dựa trên một số điều kiện, do đó, hàng không thể bị xóa?Datagridview, vô hiệu hóa nút/hàng

+0

bản sao có thể có của [Làm cách nào để vô hiệu hóa một ô nút trong WinForms DataGrid?] (Http://stackoverflow.com/questions/86096/how-do-i-disable-a-button-cell-in-a -winforms-datagrid) –

Trả lời

3

Có thực sự là HowTo trên MSDN thực hiện chính xác việc này.

Chỉnh sửa: Đã thêm một số đề xuất khác.

Bạn có thể làm cho cột nút ẩn. Hoặc nếu bạn chỉ muốn vô hiệu hóa xóa một số hàng nhất định, bạn có thể đặt đúng hoặc sai trong mỗi thuộc tính DataGridViewRow s và thuộc tính xử lý sự kiện nút của bạn, bạn chỉ xóa các giá trị được đặt thành false. Bạn có thể kết hợp điều này với chỉ thay đổi màu nền trước và nền của ô để làm cho nó trông bị vô hiệu hóa, màu này có thể được thực hiện trong trình xử lý sự kiện CellFormatting hoặc thứ gì đó để bạn không phải lặp lại và tô màu nó bằng tay.

+0

Tôi đã thấy điều đó trước đây nhưng phải có cách tốt hơn. – SoftwareGeek

+0

@BhejaFry: Vâng, rất nhiều mã đó là làm cho nó trông đúng. Nếu bạn không quan tâm về điều đó có rất nhiều cách khác, tôi sẽ thêm một vài gợi ý vào câu trả lời của tôi vì nó dễ đọc hơn ở đó. –

8

Bạn có cân nhắc việc chuyển ô nút thành hộp văn bản trống thông thường bị vô hiệu hóa không?

Dim cell As DataGridViewButtonCell = dgv.row(x).cell(y) 
cell = New DataGridViewTextBoxCell() 
cell.value = String.Empty 
cell.ReadOnly = True 

Nó mất giáp của nó "Nút" xuất hiện và hòa hợp với phần còn lại của tế bào (giả sử bạn đang sử dụng chủ yếu là DataGridViewTextBoxCells mặc định).

Dưới đây là tương đương trong C#, cộng với nó Grays ra trường để làm cho nó trông read-only:

var cell = dgv[column, row] = new DataGridViewTextBoxCell(); 
cell.Value = ""; // ignored if this column is databound 
cell.ReadOnly = true; 
cell.Style.BackColor = Color.FromKnownColor(KnownColor.Control); 
3

Đây là một bài cũ, nhưng tôi muốn đề nghị những gì tôi làm.

If conditionToDisable Then 
    Dim cell As New DataGridViewTextBoxCell 'Replace the ButtonCell for a TextCell' 
    cell.Value = valueForCell     'Set the value again' 
    grid.Rows(r).Cells(c) = cell    'Override the cell' 
End If 

Tôi hy vọng điều này hữu ích.

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