在设计时在C#中设置属性网格的集合列表值

时间:2017-08-23 07:12:04

标签: c# datagridview

我有一个自定义表单,其中有一个GridView。我的大多数表单都将继承自这个自定义表单。

所以让我们说我有

class A : B 
{
  //Contents
}

根据上述情况,我的问题是:我无法编辑网格列, 在设计师视图的属性网格上。它就像被锁定一样。

所以我决定创建一个自定义属性来设置列名列表等。

所以要做到这一点我有这些类

[TypeConverter(typeof(BrowseLayoutColumns))]   
public class BrowseLayoutColumns : ExpandableObjectConverter
{
    #region Properties

    private string _columnName = string.Empty;
    public string ColumnName
    {
        get => _columnName;
        set
        {
            if (null == value) return;
            _columnName = value;
        }

    }

    private string _bindingField = string.Empty;
    public string BindingField
    {
        get => _bindingField;
        set
        {
            if (null == value) return;
            _bindingField = value;
        }
    }        
    #endregion
    public override string ToString()
    {
        return "Columns";
    }        
}

internal class MyList<T> : List<T> where T : class
{
    #region ListMethods
    public new void Add(T item)
    {
        base.Add(item);
        ListChanged?.Invoke();
    }

    public new void Clear()
    {
        base.Clear();
        ListChanged?.Invoke();
    }
    #endregion

    #region Events
    public event ListChangedEventHandler ListChanged;
    public delegate void ListChangedEventHandler();
    #endregion
}

并在我的Custom类中添加了

private MyList<BrowseLayoutColumns> _browseLayoutColumns = new MyList<BrowseLayoutColumns>();
    [Category("Design")]
    public MyList<BrowseLayoutColumns> BrowseLayoutColumns
    {
        get => _browseLayoutColumns;
        set => _browseLayoutColumns = value;
    }

和内部表单初始化我创建了ListChanged事件。

private void _browseLayoutColumns_ListChanged()
    {
        if (_browseLayoutColumns == null) return;
        foreach (var column in _browseLayoutColumns)
        {
            myGridView1.Columns.Add(column.ColumnName, column.BindingField);
        }
    }

现在您可以在设计时看到以下内容,我可以添加列

enter image description here

这里的问题是,这里输入的数据不是持久性的,我的意思是,它没有将这些值添加到列中,因为当我运行程序时我的事件没有被触发,当我调试时看到我的BrowseLayoutList属性为空。

任何帮助?

P.S我通过手动添加到browselayoutcolumns属性来测试我的事件和其他事件

0 个答案:

没有答案