В дополнение к моему предыдущему ответу, поскольку вы предпочитаете указывать не добавлять столбцы вручную, я предлагаю вам еще один вариант: использование пользовательских атрибутов в определении ваших свойств .
Сначала вы должны закодировать свой пользовательский атрибут:
MyPropertyAttribute class
[AttributeUsage(AttributeTargets.Property)]
public class MyPropertyAttribute : Attribute
{
public enum VisibilityOptions
{
visible,
invisible
}
private VisibilityOptions visibility = VisibilityOptions.visible;
public MyPropertyAttribute(VisibilityOptions visibility)
{
this.visibility = visibility;
}
public VisibilityOptions Visibility
{
get
{
return visibility;
}
set
{
visibility = value;
}
}
}
Вы можете использовать его в своих классах, вот так:
класс Foo
public class Foo
{
private string name;
private string surname;
[MyPropertyAttribute(MyPropertyAttribute.VisibilityOptions.visible)]
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
[MyPropertyAttribute(MyPropertyAttribute.VisibilityOptions.invisible)]
public string Surname
{
get
{
return surname;
}
set
{
surname = value;
}
}
}
Вы можете написать метод, который выполняет итерацию свойств в ваших связанных объектах, используя отражение, и проверяет, помечены ли они как видимые или невидимые, чтобы добавлять или не добавлять столбцы. Вы можете даже иметь собственный DataGridView с таким поведением, поэтому вам не придется повторять это каждый раз. Вы можете использовать только свой собственный DataGridView и пометить видимость в свойствах.
Как то так ...
public class MyCustomDataGridView : DataGridView
{
public MyCustomDataGridView()
{
this.AutoGenerateColumns = false;
}
public void Load<T>(ICollection<T> collection)
{
foreach(object myAttribute in typeof(T).GetCustomAttributes(typeof(MyPropertyAttribute).GetType(), true))
{
if (((MyPropertyAttribute)myAttribute).Visibility == MyPropertyAttribute.VisibilityOptions.visible)
{
//...
}
}
}
}