none
Привязка List<T> к BindingNavigator RRS feed

  • Вопрос

  • Добрый день. Приложение WinForm.   Есть список List<T>. Задаю  BindingSource.DataSource к этому списку. Далее подключаю BindingNavigator к BindingSource. После этого кнопка <+> Добавить у BN становиться не доступной, а кнопка <х> удалить доступна. Почему не пойму?
    26 января 2021 г. 12:14

Ответы

  • Я уточню вопрос. У меня List<Image>. Далее я пишу

    List<Image> imd; //один столбец
    BindingSource bs = new BindingSource();
    BindingNavigator bn;
    bs.DataSource = img;
    bs.AllowNew = true; //разрешение на новую строку
    bn.datasource = bs;
    bs.AllowNewItem += Bs_AddingNew; //только подключил

    Как только нажимаю кнопку добавить, тут же вылетает исключение :

    System.InvalidOperationException: "Вызов AddNew для типа 'System.Drawing.Image' невозможен. 
    У данного типа нет публичного конструктора по умолчанию. 
    Вызов AddNew для типа 'System.Drawing.Image' возможен после 
    обработки события AddingNew и создания соответствующего объекта."

    Вам же четко написали причину - нет конструктора по умолчанию (без параметров). Ведь код для создания нового экземпляра ничего не знает о том что он создает и не может "выбрать" нужный конструктор и обеспечить параметры для него, единственный вариант - конструктор по умолчанию, а его нет.

    Оберните ваше изображение в свой класс который будет иметь конструктор по умолчанию, тогда все заработает.



    This posting is provided "AS IS" with no warranties, and confers no rights.

    27 января 2021 г. 17:14
    Модератор

Все ответы

  • Здравствуйте,

    Попробуйте в BindingSource:

    this.customersBindingSource.AllowNew = true;

    Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение" Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    27 января 2021 г. 6:59
    Модератор
  • Я уточню вопрос. У меня List<Image>. Далее я пишу

    List<Image> imd; //один столбец
    BindingSource bs = new BindingSource();
    BindingNavigator bn;
    bs.DataSource = img;
    bs.AllowNew = true; //разрешение на новую строку
    bn.datasource = bs;
    bs.AllowNewItem += Bs_AddingNew; //только подключил
    

    Как только нажимаю кнопку добавить, тут же вылетает исключение :

    System.InvalidOperationException: "Вызов AddNew для типа 'System.Drawing.Image' невозможен. 
    У данного типа нет публичного конструктора по умолчанию. 
    Вызов AddNew для типа 'System.Drawing.Image' возможен после 
    обработки события AddingNew и создания соответствующего объекта."

    27 января 2021 г. 9:07
  • как этот код у вас вообще работает, ведь у BindingSource нет события AllowNewItem?
    27 января 2021 г. 16:14
  • Я уточню вопрос. У меня List<Image>. Далее я пишу

    List<Image> imd; //один столбец
    BindingSource bs = new BindingSource();
    BindingNavigator bn;
    bs.DataSource = img;
    bs.AllowNew = true; //разрешение на новую строку
    bn.datasource = bs;
    bs.AllowNewItem += Bs_AddingNew; //только подключил

    Как только нажимаю кнопку добавить, тут же вылетает исключение :

    System.InvalidOperationException: "Вызов AddNew для типа 'System.Drawing.Image' невозможен. 
    У данного типа нет публичного конструктора по умолчанию. 
    Вызов AddNew для типа 'System.Drawing.Image' возможен после 
    обработки события AddingNew и создания соответствующего объекта."

    Вам же четко написали причину - нет конструктора по умолчанию (без параметров). Ведь код для создания нового экземпляра ничего не знает о том что он создает и не может "выбрать" нужный конструктор и обеспечить параметры для него, единственный вариант - конструктор по умолчанию, а его нет.

    Оберните ваше изображение в свой класс который будет иметь конструктор по умолчанию, тогда все заработает.



    This posting is provided "AS IS" with no warranties, and confers no rights.

    27 января 2021 г. 17:14
    Модератор