Подтвердить что ты не робот

Есть ли атрибут, который я могу использовать в своем классе, чтобы сообщить DataGridView не создавать для него столбец, связанный с List <MyClass>

У меня есть класс вроде этого:

private class MyClass {
  [DisplayName("Foo/Bar")]
  public string FooBar { get; private set; }
  public string Baz { get; private set; }      
  public bool Enabled;
}

Когда я создаю List<MyClass> и назначаю его DataSource для DataGridView, сетка показывает мне два столбца: "Foo/Bar" и "Baz". Это то, что я хочу.

В настоящее время он работает, потому что Enabled - это поле, а не свойство. DataGridView будет только получать свойства. Однако это грязный хак.

Я хотел бы также включить свойство Enabled, но все же спрятать его в DataGridView.

Я знаю, что могу вручную удалить столбец после привязки.. но это не идеально.

Есть ли атрибут, похожий на DisplayName, с которым я могу пометить свойство? Что-то вроде [Visible(false)]?

4b9b3361

Ответ 1

[Browsable(false)] скроет свойство из DataGridView.

Визуальный дизайнер обычно отображается в окне "Свойства" члены, которые либо не имеют атрибута для просмотра, либо отмечены Параметр BrowsableAttribute для просмотра браузера установлен в true. Эти члены могут быть изменены во время разработки. Участники, отмеченные Параметр просмотра конструктора BrowsableAttribute для параметра false равен не подходят для редактирования времени разработки и, следовательно, не являются отображается в визуальном дизайнере. Значение по умолчанию - true.

Ответ 2

Я блаженно не осознавал, что декоратор System.ComponentModel атрибут, например BrowsableAttribute, и он был связан с чем-то другим, кроме привязки к PropertyGrid. (facepalm) Мне нравится подход C-Pound Guru, потому что он позволяет вам поддерживать ваш графический интерфейс более свободно, чем то, что я делал в прошлом.

Как раз для другой перспективы, подход, который я использовал в течение длительного времени, состоит в том, чтобы предварительно определить столбцы в DataGridView, либо программно, либо через конструктор форм. Когда вы это сделаете, вы можете установить для каждого столбца DataPropertyName имя вашего свойства. Единственный трюк в том, что вам нужно установить свойство DataGridView AutoGenerateColumns в значение false, иначе DGV полностью игнорирует ваши созданные вручную столбцы. Обратите внимание, что по какой-либо причине свойство AutoGenerateColumns скрыто из Grid Design Designer... не знаю, почему. Единственное преимущество, которое я вижу в этом подходе, заключается в том, что вы можете предварительно установить форматирование столбцов и т.д. - вам не нужно связывать, а затем менять настройки рендеринга/размера столбца.

Вот пример того, что я имею в виду:

_DGV.AutoGenerateColumns = false;
DataGridViewTextBoxColumn textColumn = new DataGridViewTextBoxColumn();
textColumn.DataPropertyName = "FooBar";
textColumn.HeaderText = "Foo/Bar"; // may not need to do this with your DisplayNameAttribute
_DGV.Columns.Add(textColumn);
textColumn = new DataGridViewTextBoxColumn();
textColumn.DataPropertyName = "Baz";

List<MyClass> data = GetMyData();
_DGV.DataSource = data;