На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> DataGridView.DataSource , Не обновляется DataGridView
    В программе использую следующий код:
    ExpandedWrap disabled
      dataGridView1.DataSource = context.Items;
       
      comboBox1.DataSource = context.Items;
      comboBox1.DisplayMember = "TB_TypeName";
      где
      public ObjectSet<Item> Items;
      MyEntities context=new MyEntities ();

    Но в dataGridView и в comboBoxe не отображаются добавленное Item.
    ExpandedWrap disabled
      Item temp = new Item();
                  //Заполняю свойства Item
                  context.Items.AddObject(temp);
                  context.SaveChanges();


    Добавленное Item отображаются если создаю новый context либо если изменяю DataSource.

    Скажите пожалуйста в чем причина?
    Сообщение отредактировано: Aram -
      А почему данные биндятся на context.Items а добавляются к context.Types? Чтобы данные сразу отобразились нужно использовать интерфейс INotifyPropertyChanged. Если используете Entity Model то это будет сделано автоматом. Если же через Code First то нужно обновлять самому.
        Цитата Craft @

        А почему данные биндятся на context.Items а добавляются к context.Types?

        произошла опечатка (в программе написано правильно)
        Цитата

        Если используете Entity Model то это будет сделано автоматом

        использую Entity Model, но данные автоматически не обновляются в dataGridView, но в context.Items данные добавляются
        Цитата

        данные в dataGridView обновляются, если создаю новый context либо если изменяю DataSource
          Покажите пожалуйста реализацию свойства ObjectSet<Item> Items. Наверняка просто не вызывается обновление свойства с помощью PropertyChanged.
            Цитата Craft @

            Items сгенерировал Entity model

            ExpandedWrap disabled
              public ObjectSet<Item> Items
                      {
                          get
                          {
                              if ((_Items == null))
                              {
                                  _Items = base.CreateObjectSet<Item>("Items");
                              }
                              return _Items;
                          }
                      }
                      private ObjectSet<Item> _Items;
              Попробуйте сделать как написано здесь Попробуйте тоже написать Items.Refresh();. Как то так
              ExpandedWrap disabled
                dataGridView1.Items.Refresh();
                Цитата

                dataGridView1.Items.Refresh();

                DataGridView не имеет коллекцию Items.
                ExpandedWrap disabled
                  Вот так dataGridView1.DataSource = context.Items.ToList(); все ОК.


                Просто я не могу понять, когда пишу dataGridView1.DataSource = context.Items; DataSource присваивается ссылка на context.Items. Ни так ли?
                context.Items.Last() возвращает добавленное Item.
                Так почему же dataGridView не обновляется автоматически?
                  Цитата
                  Так почему же dataGridView не обновляется автоматически?

                  Видимо, потому что нет реализации INotifyCollectionChanged. Проще говоря, коллекция не может уведомлять о том, что она изменилась. Вам нужно либо делать реализацию коллекции с нотификацией о изменениях, либо обновлять вручную.
                    Aram А почему вы не используете созданный специально для таких случаев DataGrid? DataGridView не подходит для отображения данных из БД. Лучше взять говотовый компонент который предназанчений именно для этого. Посмотрите например обзор платных гридов и для своего случая можете поскать бесплатные которые приводят в коментарих ниже. Там есть выбор как под WPF так и под WindowsForms.
                    Сообщение отредактировано: Craft -
                    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0253 ]   [ 15 queries used ]   [ Generated: 21.05.24, 09:25 GMT ]