Странное поведение datagridview
Сегодня я столкнулся со странным поведением datagridview.
Это было, когда я пытался прикрепить коллекцию моделей POCO к gridview.
Класс POCO выглядит следующим образом:
class SchemaTaxClass { internal short ID { get; set; } internal short TAXCATEGORY_ID { get; set; } internal string NAME { get; set; } internal string ACRONYM { get; set; } internal System.DateTime EFFECTIVEFROM { get; set; } internal string DESCRIPTION { get; set; } internal System.DateTime CREATEDON { get; set; } internal bool ISACTIVE { get; set; } }
Все свойства являются внутренними.
В основном классе у меня есть:
public partial class TaxationUtils : Form { List<Taxation.PrivateData.Schemas.SchemaTaxClass< _taxClassesCollection; Taxation.PrivateData.TaxClassCollection _clsTaxClassCollection; public TaxationUtils() { InitializeComponent(); SynchronizeTaxClassCollection(); } void SynchronizeTaxClassCollection() { try { GetOrRefreshTaxClassCollection(null); PopulateGridWithExistingTaxClasses(); } catch (Exception ex) { AppendMsg(ex.ToString()); } } void GetOrRefreshTaxClassCollection(short? taxCategoryID) { try { if (_clsTaxClassCollection == null) _clsTaxClassCollection = new PrivateData.TaxClassCollection(taxCategoryID); _taxClassesCollection = _clsTaxClassCollection.GetTaxClassCollection; } catch (Exception ex) { throw ex; } } void PopulateGridWithExistingTaxClasses() { dgv_ExistingTaxClasses.DataSource = _taxClassesCollection.ToList(); } }
Это класс данных, из которого мы извлекаем данные (через Entity Framework)
class TaxClassCollection { short? _taxCategoryID = null; bool FLAG_ERR; List<SchemaTaxClass> _taxClassList = null; internal TaxClassCollection(short? taxCategoryID) { this._taxCategoryID = taxCategoryID; } internal List<SchemaTaxClass> GetTaxClassCollection { get { FLAG_ERR = false; try { GetTaxClasses(); if (!FLAG_ERR && _taxClassList != null) return _taxClassList; else return null; } catch (Exception ex) { throw ex; } } private set { _taxClassList = (List<SchemaTaxClass>)value; } } void GetTaxClasses() { _taxClassList = new List<SchemaTaxClass>(); try { using (var _context = new vk1_0Entities()) { _taxClassList = (from taxClass in _context.TAX_CLASS where taxClass.taxZone_id == BusinessInfo.TaxZoneID } if (FLAG_ERR) FLAG_ERR = false; } catch (Exception ex) { if (!FLAG_ERR) FLAG_ERR = true; throw ex; } } }
Что происходит, когда члены класса POCO имеют внутренний модификатор as, gridview не отображает данные.
Если модификатор включен в public, данные становятся видимыми.
Почему такое поведение?
Замечания:
Класс POCO, класс данных и основной класс находятся в одной сборке и пространстве имен.
Кроме того, данные присутствуют в переменной коллекции, используемой в качестве источника данных для gridview.
Что я уже пробовал:
Я попытался изучить представление сетки из MSDN, но не нашел ничего, что могло бы оправдать такое поведение.
Когда все находится в одной сборке и пространстве имен, внутреннее должно работать.