2015-02-19 3 views
0

Либо я делаю что-то неправильно, либо это ошибка.DataGridView генерирует столбец для свойства с возможностью просмотра false

У меня есть интерфейс IPerson который имеет одно свойство, установленное на [Browsable(false)]. После того как я создал новый UserControl (UC), перетащил DataGridView (DGV) в него и породил BindingSource (BS) для интерфейса и назначил его на DGV это делает совершенно нормально и свойство делает а не. В конструкторе UC я создал образец Person и назначил его как источник BS, так что у меня есть хотя бы ряд в DGV для просмотра.

Я создал Form и перетащил на него новый созданный UC, чтобы увидеть, что свойство зла появляется в виде столбца.

ПОЧЕМУ?

Я пробовал несколько вещей, от перекомпиляции, до литья конкретного класса в интерфейс, но у меня все еще такая же проблема. В Форме Control неожиданно создает для него столбец, а сам элемент управления он делает a) не имеет его b) также не создает его.

// person interface 
public interface IPerson : IEntity 
{ 
    string Surname { get; set; } 
    int Age { get; } 

    [DisplayName("Date of Birth")] 
    DateTime DateOfBirth { get; set; } 
    Gender Gender { get; set; } 
    Address Address { get; set; } 

    //THIS IS THE BAD BED :-P which should not show up 
    [DefaultValue(null), Browsable(false), ReadOnly(true)] 
    IBed Bed { get; set; } 
} 

// this is the UserCOntrol with a DGV in it, it displays it fine... 
// and does not generate the column for the property 
public partial class PersonControlView : UserControl 
{ 
    public PersonControlView() 
    { 
     InitializeComponent(); 

     // just a temporary test ... 
     var l = new List<IPerson> 
     { 
      new Person 
      { 
       Address = 
        new Address 
        { 
         City = "Cologne", 
         Country = "Germany", 
         County = "***", 
         Number = "**", 
         Postcode = "*****", 
         Street = "**** Strasse" 
        }, 
       DateOfBirth = new DateTime(1886, 32, 13), 
       Gender = Gender.Male, 
       Name = "***", 
       Surname = "***" 
      } 
     }; 

     set(l); 
    } 
    // just a temporary test method... 
    public void set(IList<IPerson> persons) 
    { 
     iPersonBindingSource.DataSource = persons; 
    } 

Некоторые фотографии

Это вид на UserControl, он генерировал столбцы правильно, как показано на рисунке This is how it looks on the UserControl

Это управление после того как я перетащить его из панели инструментов на form ... население происходит в конструкторе (см. тестовый код выше). Поле не должно отображаться - правильно? This is how it looks on the Form

ответ

0

Facepalm OK, произошло следующее:

Я создал контроль и DGV, прежде чем я установить атрибут свойства. Это вызвало фактическое создание столбца для свойства.

Затем я добавил атрибут к правилу, обновил источник данных, а DGV в элементе управления должен был переключить столбец на visible = false.

Так колонна была всегда там, как раз не дисплей в UserControl вопрос, почему это вдруг в форме? (*)

(*) не имеет значения, так как я исправил свою проблему. но до сих пор загадочное поведение

я удалил DGV снова из-под контроля (который удаляется, очевидно, все столбцы, а также, воссозданной его, присвоившего DataSource и теперь он ведет себя, как и ожидалось.