Сделать свойство видимым в DataGridView, но НЕ в PropertyGrid?

Допустим, у меня есть свойство, которое я хочу показать в DataGridView, но не тогда, когда тот же объект отображается в PropertyGrid. Я знаю, что могу использовать [Browsable(false)], но это скрывает это в обоих взглядах. Я также могу сделать gridView.Columns["blah"].Visible = false;, но это противоположно тому, что я хочу, так как он скрывается в DataGridView, но не в PropertyGrid. Есть ли способ сделать обратное? (Если не считать создания новой таблицы DataTable просто для хранения одних и тех же данных за вычетом одного поля и привязки всего к этому вместо этого - это действительно удачный способ сделать что-то.) В качестве альтернативы, я мог бы жить с решением, которое добавляет столбец в DataGridView. это не присутствует на фактическом классе.

1 ответ

Решение

Эту проблему можно решить с помощью свойства BrowsableAttributes PropertyGrid. Сначала создайте новый атрибут, подобный этому:

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

Затем добавьте этот атрибут ко всем тем свойствам, которые вы хотите показать в вашей PropertyGrid:

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

Затем установите свойство BrowsableAttributes следующим образом:

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

Это покажет только приписанные свойства в вашей сетке свойств, и DataGridView все еще может получить доступ ко всем свойствам с помощью лишь немного больше усилий по написанию кода.

Я бы все-таки пошел с Tergiver и назвал это поведение ошибкой, поскольку документация по атрибуту Browsable четко заявляет о его использовании только для окон свойств.

(Кредит предоставляется пользователю "maro" по адресу http://www.mycsharp.de/wbb2/thread.php?postid=234565)

Другие вопросы по тегам