我有一个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而不是数组中的索引显示它们的名称?
答案 0 :(得分:1)
对于第一个问题,最简单的方法是添加一个"假的"从" real"计算的属性属性。它并不完美,但您可以使用各种属性来提供帮助:
EditorBrowsable(never)指示Visual Studio的智能感知不在外部代码中显示此属性。
[Browsable(false)]
public ParameterObject[] Parameters
{
get { return _parameters; }
set { _parameters = value; }
}
[Category("SubReportParams"), DisplayName("Parameters")]
[EditorBrowsable(EditorBrowsableState.Never)]
public ParameterObject[] NonEmptyParameters
{
get
{
return _parameters.Where(p => p != null).ToArray();
}
}
对于第二个问题,一个简单的方法是添加一个ToString()实现,如下所示:
public class ParameterObject
{
public override string ToString()
{
return Name;
}
}
否则,您可以向班级添加自定义TypeConverter。