现象:软件在打开后直接查看A界面(DataGridView,通过DataSouce绑定DataTable)数据时,数据正常显示;
若软件打开后产看其他(B)界面后,再查看A数据时,A无法显示数据。
原因:B界面显示时,调用了用于动态调整数据再属性栏(PropertyGrid)中的显示,若对象中存在未设置完整属性的Attribute的可能会导致问题的出现:
private void SetPropertyBrowsable(object obj, string propertyName, bool browsable)
{
Type type = typeof(BrowsableAttribute);
PropertyDescriptorCollection props = (obj);
if (props[propertyName] == null)
return;
AttributeCollection attrs = props[propertyName].Attributes;
FieldInfo fld = ("browsable", | );
if (fld != null)
{
(attrs[type], browsable);
}
}
具体原因:对类字段而非属性动态设置了属性可视,导致软件异常显示。
即:Class ABC
{
string Name;
}
使用时, abc = new ABC();
SetPropertyBrowable(abc,"Name",false);//此句导致软件异常。
解决方案:设置属性Attribute
Class ABC
{
[Browsable(true)] //添加此语句
string Name{get;set;};//并且修改为属性
}
然后再调用SetPropertyBrowable(abc,"Name",false)时可正常使用。
注意:本类ABC内需要保证所有的属性都设置[Browsable(XXXX)] 属性,否则可能会导致未设置的属性显示异常。
希望对遇到此问题的朋友有帮助!