none
Обновление DataGridView используя DataTable из другого потока RRS feed

  • Общие обсуждения

  • Здравствуйте, Уважаемые разработчики!

    Присваиваю таблицы, которая содержится в другом классе, при этом эта таблица обновляется в отдельном потоке 

    При этом строки в Вьювере не обновляются. Только если принудительно вызвать в Баттоне  PositionsView.Refresh();.

    Но при этом, если повесить Хэндлер на добавление и изменение строки в  таблице haza.positions; добавить PositionsView.Refresh() туда, то Вью не обновляется :(

    помогите, пожалуйста, решить проблемы и поясните почему так  происходит

    PositionsView.DataSource = haza.positions;

Все ответы

  • я думаю что именно то что вы это делаете в другом потоке и есть причиной. 

    Вам нужно либо после окончания рефреша вызвать PositionsView.Refresh()  в главном потоке (что делается через Invoke/BeginInvoke), либо обновлять таблицы в основном. 

     


    Don't forget to mark the correct answer Blog
  • Это я и пытаюсь сделать в потоке формы 

     

    private void PosRowChange(object sender, System.Data.DataRowChangeEventArgs e)
    
            {
    
                MessageBox.Show("Change");
    
                
    
                //PositionsView.Refresh();
    
            }

     

  • У кого нибудь есть еще советы?
  • Уважаемый пользователь!

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме


    Для связи [mail]
  • Хотелось бы повторить вопрос. В потоке создания формы создается поток

     

       oThread = new Thread(new ThreadStart(StartPlaza2));

                oThread.Start();

     

    В этом потоке создается объект Plaza 2 . В этом объекте есть DataTable. Он задается как DataSource у DataGrid

    PositionsView.DataSource = plaza2.positions;

     

    Но почему то обновление не происходит, если вешается хендлер на добавление строки. 

     

       private void PosRowChange(object sender, System.Data.DataRowChangeEventArgs e)

            {

     

     

                MessageBox.Show("Change");

     

                //PositionsView.Refresh();

            }

    При это если просто вставить Рефреш в кнопку-все обновляется. А если ревреш засунуть в таймер, то нет .. Помогите , пожалуйста

     

  • Вызывайте обновление DataGridView в основном потоке, как вам посоветовал Oleksandr Reminnyi. Т.е.:

      void PosRowChange(object sender, DataRowChangeEventArgs e)
      {
       Console.WriteLine("change");
       PositionsView.Invoke((MethodInvoker)delegate { PositionsView.Refresh(); });
      }
    

     


    Для связи [mail]
  • Здравствуйте! 

    Этот метод работает. Но проблема в том, что иногда (то есть не всегда) такой метод  останавливает работу с GUI полностью и форма больше становится не доступной. Это происходит при добавлении строк или обновлении. Как можно исправить эту проблему?

    16 июня 2011 г. 8:30
  • Уважаемый пользователь!

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме


    Для связи [mail]
    12 июля 2011 г. 15:02
  • > метод останавливает работу с GUI полностью и форма больше становится не доступной. Это происходит при добавлении строк или обновлении

    см. пример

     

    3 сентября 2011 г. 12:04