Есть ли атрибут, который я могу использовать в своем классе, чтобы сообщить 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)]
?
Ответы
Ответ 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;
Ответ 3
Используйте [Display(AutoGenerateField = false)]
, чтобы скрыть свойства, которые вам не нужны.