Я даже не уверен, делаю ли я это правильно. Но в основном у меня есть список объектов, которые создаются из класса. Оттуда, я связываю список с представлением datagrid, которое находится на Windows Form (C#)
Оттуда, это показывает все общественные собственности объекта в представлении datagrid. Однако существуют некоторые свойства, в которых я все еще нуждаюсь доступный от других частей моего приложения, но действительно не обязан быть видимым в DataGridView.
Так есть ли атрибут или что-то подобное, которое я могу записать выше свойства для исключения его из того, чтобы быть показанным.
P.S. Я связываю во времени выполнения. Таким образом, я не могу отредактировать столбцы через разработчика.
P.P.S. Никакие ответы просто обнародования переменных (Хотя, если это - единственный путь, сообщить мне :)).
Добавьте атрибут [Browsable (false)]
к общедоступным свойствам, для которых вы не хотите создавать столбец.
В дополнение к моему предыдущему ответу, поскольку вы предпочитаете указывать, чтобы не добавлять столбцы вручную, я предлагаю вам другой вариант: с использованием настраиваемых атрибутов в вашем определении свойств .
Во-первых, вы должны закодировать свой настраиваемый атрибут:
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 class
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)
{
//...
}
}
}
}
Я должен был ответить так же, как @Vivek говорит в своем комментарии. Я не знаю, почему он не добавил сюда ответ ...
Что ж, если вы позволите элементу управления DataGridView автоматически генерировать свои столбцы, он покажет все свойства в связанных объектах. Итак, прежде всего, вы должны включить DataGridView.AutoGenerateColumns = false
.
Затем вы можете добавлять столбцы во время выполнения. Например:
DataGridViewColumn myColumn = new DataGridViewTextBoxColumn();
myColumn.DataPropertyName.HeaderText = "Title of the column";
myColumn.DataPropertyName = "NameOfTheProperty";
//...
MyDataGridView.Columns.Add(myColumn);