一种可能导致DataGridView无法显示数据问题的原因以及解决方案

时间:2025-04-16 07:21:15

现象:软件在打开后直接查看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)] 属性,否则可能会导致未设置的属性显示异常。

 

希望对遇到此问题的朋友有帮助!