2012-05-23 28 views
6

Giả sử tôi có một thuộc tính mà tôi muốn hiển thị trong một DataGridView, nhưng không phải khi cùng một đối tượng được hiển thị trong một PropertyGrid. Tôi biết tôi có thể sử dụng [Browsable(false)] nhưng ẩn nó trong cả hai chế độ xem. Tôi cũng có thể làm một gridView.Columns["blah"].Visible = false;, nhưng điều này là đối diện của những gì tôi muốn, vì nó ẩn trong DataGridView nhưng không phải trong PropertyGrid. Có cách nào để làm ngược lại không? (Viết tắt của một DataTable hoàn toàn mới chỉ để giữ cùng một dữ liệu trừ một trường, và rebinding tất cả mọi thứ để thay vào đó - đó thực sự là một cách kludge để làm việc.) Ngoài ra, tôi có thể sống với một giải pháp mà thêm một cột vào DataGridView không có trong lớp thực tế.Làm cho một tài sản có thể nhìn thấy trong DataGridView nhưng không trong PropertyGrid?

+1

tôi sẽ chấp nhận họ khi họ thực sự trả lời câu hỏi của tôi. Một nửa câu hỏi của tôi hầu như không có bất kỳ quan điểm nào, hãy để một mình phản ứng tốt. –

+1

Tôi gọi đây là lỗi. 'Browsable' đặc biệt nói rằng nó xác định khả năng hiển thị của một thành viên trong cửa sổ thuộc tính. Điều này không có gì để làm với một DGV. Bạn có thể mở một vấn đề kết nối, nhưng tỷ lệ cược rằng họ sẽ sửa chữa nó là chính xác bằng không. Một sửa chữa chắc chắn sẽ phá vỡ mã hiện tại. Tôi nghĩ bạn không may mắn ở đây. – Tergiver

+0

Chết tiệt. Tất nhiên, họ có thể thêm một trang trí mới thay vì thử và sửa chữa có thể duyệt được, nhưng vẫn hút rằng không có cách nào để làm điều này. Bạn sẽ nghĩ rằng nó sẽ không phải là một yêu cầu không phổ biến ... –

Trả lời

6

có thể giải quyết vấn đề này bằng cách sử dụng thuộc tính BrowsableAttributes của PropertyGrid. Đầu tiên, tạo một thuộc tính mới như thế này:

public class PropertyGridBrowsableAttribute : Attribute 
{ 
    private bool browsable; 
    public PropertyGridBrowsableAttribute(bool browsable){ 
     this.browsable = browsable; 
    } 
} 

Sau đó thêm thuộc tính này cho tất cả những thuộc tính mà bạn muốn được hiển thị trong PropertyGrid của bạn:

[DisplayName("First Name"), Category("Names"), PropertyGridBrowsable(true)] 
public string FirstName { 
    get { return ... } 
    set { ... } 
} 

Sau đó, thiết lập thuộc tính BrowsableAttributes như thế này:

myPropertyGrid.BrowsableAttributes = new AttributeCollection(
    new Attribute[] { new PropertyGridBrowsableAttribute(true) }); 

Điều này sẽ chỉ hiển thị thuộc tính được phân bổ trong lưới thuộc tính của bạn và DataGridView vẫn có thể truy cập tất cả các thuộc tính chỉ nỗ lực mã hóa nhiều hơn một chút.

Tôi vẫn sẽ đi với Tergiver và gọi hành vi này là một lỗi, vì tài liệu của thuộc tính Có thể duyệt rõ ràng chỉ rõ việc sử dụng nó cho các cửa sổ thuộc tính.

(tín dụng đi vào sử dụng "maro" tại http://www.mycsharp.de/wbb2/thread.php?postid=234565)

+0

Vâng, đã 3 tháng kể từ lần cuối tôi chạm vào dự án này, và một phần của nó liên quan đến việc này đã được tái cấu trúc hoàn toàn, vì vậy tôi không thể kiểm tra điều này nữa, nhưng tôi sẽ tiếp tục và chấp nhận câu trả lời này, bởi vì nó người duy nhất tôi có, và nó _looks_ hợp lệ ... –

+0

Tôi tình cờ gặp điều này một vài ngày trước, có cùng một vấn đề. Nó chắc chắn hoạt động như một sự quyến rũ! Nhưng nó rất thú vị khi thấy rằng điều này dường như đã được xúc động chỉ rất ít lần và chỉ có MỘT người đã đưa ra một giải pháp ... Vâng, bây giờ nó có sẵn bằng tiếng Anh là tốt. – Sebastian

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