Список привязки данных объектов к WinForms DataGridView, но не показывают определенные общественные собственности

Я даже не уверен, делаю ли я это правильно. Но в основном у меня есть список объектов, которые создаются из класса. Оттуда, я связываю список с представлением datagrid, которое находится на Windows Form (C#)

Оттуда, это показывает все общественные собственности объекта в представлении datagrid. Однако существуют некоторые свойства, в которых я все еще нуждаюсь доступный от других частей моего приложения, но действительно не обязан быть видимым в DataGridView.

Так есть ли атрибут или что-то подобное, которое я могу записать выше свойства для исключения его из того, чтобы быть показанным.

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

P.P.S. Никакие ответы просто обнародования переменных (Хотя, если это - единственный путь, сообщить мне :)).

8
задан Iain Holder 9 April 2010 в 18:26
поделиться

3 ответа

Добавьте атрибут [Browsable (false)] к общедоступным свойствам, для которых вы не хотите создавать столбец.

15
ответ дан 5 December 2019 в 10:02
поделиться

В дополнение к моему предыдущему ответу, поскольку вы предпочитаете указывать, чтобы не добавлять столбцы вручную, я предлагаю вам другой вариант: с использованием настраиваемых атрибутов в вашем определении свойств .

Во-первых, вы должны закодировать свой настраиваемый атрибут:

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)
                {
                    //...
                }
            }

        }

    }
0
ответ дан 5 December 2019 в 10:02
поделиться

Я должен был ответить так же, как @Vivek говорит в своем комментарии. Я не знаю, почему он не добавил сюда ответ ...

Что ж, если вы позволите элементу управления DataGridView автоматически генерировать свои столбцы, он покажет все свойства в связанных объектах. Итак, прежде всего, вы должны включить DataGridView.AutoGenerateColumns = false .

Затем вы можете добавлять столбцы во время выполнения. Например:

DataGridViewColumn myColumn = new DataGridViewTextBoxColumn();
myColumn.DataPropertyName.HeaderText = "Title of the column";
myColumn.DataPropertyName = "NameOfTheProperty";

//...

MyDataGridView.Columns.Add(myColumn);
2
ответ дан 5 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: