У меня есть контроль PropertyGrid, к которому я связать контейнер с массивом сложных объектов:PropertyGrid контроль + массив пользовательских объектов
// Collection
public class ParametersCollection
{
private ParameterObject [] _parameters = null;
[Category("SubReportParams")]
public ParameterObject [] Parameters
{
get { return _parameters; }
set { _parameters = value; }
}
public ParametersCollection()
{
// _parameters initialization here...
}
}
// Complex object
public class ParameterObject
{
private string _name = "";
private string _value = "";
[Category("Information"), DisplayName("Name")]
public string Name
{
get { return _name; }
set { _name = value; }
}
[Category("Information"), DisplayName("Value")]
public string Value
{
get { return _value; }
set { _value = value; }
}
}
Все работает отлично, за исключением двух случаев:
В примере, если array _parameters имеет только 2 элемента, размер массива по умолчанию равен 4, а элементы с индексами 2 и 3 - это нули. PropertyGrid отображает эти элементы как пустые поля. Как заставить PropertyGrid игнорировать эти поля и просто не отображать его?
переменная _parameters - это тип массива, поэтому элементы _parameters отображаются со своими индексами от 0 до n. Есть ли возможность отображать их с их именами из свойства ParamObject.Name вместо их индексов из массива?
Спасибо за ваш повтор. В первом случае «return_parameters.Where (p => p! = Null) .ToArray();" был правильный намек :-) И решение второй проблемы состояло в том, чтобы использовать ICustomTypeDescriptor. –