Я также хотел использовать DataGridView только для чтения, и в моем случае отдельный поток медленно получает данные и передает их в поток GUI через многопоточный список и таймер формы. При таком подходе поток GUI расширяет сетку данных по мере необходимости, позволяя просматривать.
С предложениями выше, выбор может быть скрыт, но ни один не может помешать сбросу ячейки, когда мой поток GUI вызывает dataGridView.Rows.Add () с выбором. Это включает в себя перехват событий для предотвращения выбора и отключение режима редактирования.
Я нашел поведение, которое хотел с
dataGridView.AllowUserToAddRows = false;
Теперь у меня есть динамически изменяемая асинхронно загружаемая сетка данных, доступная только для чтения.
Мне не понравилось решение BackgroundWorker, потому что прогресс является довольно обременительным для моей загрузки кода. Мне также не нравилось требование перестраивать новый DataTable при каждом обновлении сетки. Я не смог найти никаких подсказок по обновлению DataGridView с помощью одного DataTable, который создается, но, похоже, это должно быть возможно.