DataGridView не обновляется при изменении коллекции

#c# #.net #windows #winforms #datagridview

#c# #.net #Windows #winforms #datagridview

Вопрос:

В моем приложении у меня есть DataGridView, привязанный к BindingList, объект наследует INotifyPropertyChanged для информирования об изменении, в том же потоке.

Проблема в том, что DataGridView не обновляет пользовательский интерфейс, при выборе строки обновляются значения в строке, поэтому я попытался использовать DataGridView.Refresh() в конце, что сработало, теперь все значения обновляются в пользовательском интерфейсе DataGridView.

Но фактический процесс выполняется долго, он загружается из Интернета, поэтому мне нужно показывать значения по мере их обновления.

Пожалуйста, предложите.

 public class Proxy : INotifyPropertyChanged
    {
        public string IPAddress
        {
            get
            {
                return ipaddress;
            }
            set
            {
                ipaddress = value;
                OnPropertyChanged("IPAddress");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        protected void OnPropertyChanged(string name)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(name));
            }
        }
}

SortableSearchableList<Proxy> proxyList = new SortableSearchableList<Proxy>();
proxydatagrid.DataSource = proxyList;
  

Я ХОЧУ ОБНОВЛЯТЬ DATAGRIDVIEW ПО мере ИЗМЕНЕНИЯ КОЛЛЕКЦИИ, НЕ ПОЗЖЕ.

Комментарии:

1. Не могли бы вы, пожалуйста, показать какой-нибудь код — в частности, о том, как вы реализовали INotifyPropertyChanged и как вы добавляете элементы в свой список привязки и устанавливаете свойство DataSource.

2. У меня это работает идеально, единственное отличие в моем коде в том, что я использую обычный список привязок<T> не могли бы вы попробовать свой код только со стандартным списком привязок<T>, чтобы проверить, нет ли проблем в вашей реализации SortableSearchableList<T>

3. Еще одна мысль — когда вы говорите, что у вас длительный процесс, выполняется ли это в фоновом режиме worker? Вам нужно быть осторожным, чтобы ваш запуск выполнялся в правильном потоке, используя что-то вроде метода ReportProgress.

Ответ №1:

Вы должны написать обновление по строкам.

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

Другим вариантом является сохранение ваших результатов в другой таблице данных или dataset, и когда операция выполнена, вы заменяете таблицу данных вашей сетки данных на новую.

Ответ №2:

Я думаю, вы хотите вызвать DataGrid.Items.Refresh() для обновления элементов, а не DataGridView.Refresh()