我有一个自定义表单,其中有一个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);
}
}
现在您可以在设计时看到以下内容,我可以添加列
这里的问题是,这里输入的数据不是持久性的,我的意思是,它没有将这些值添加到列中,因为当我运行程序时我的事件没有被触发,当我调试时看到我的BrowseLayoutList属性为空。任何帮助?
P.S我通过手动添加到browselayoutcolumns属性来测试我的事件和其他事件