2016-07-18 2 views
0

У меня есть DataGridView в форме, которая загружается в некоторые данные из объекта DataTable, когда что-то на предыдущем шаге (это приложение типа мастера, и это находится в TabControl). При переходе с предыдущего шага есть файл, который помещается в DataGridView с добавлением нескольких дополнительных столбцов. Чтобы уточнить: заполнение таблицы работает точно так, как должно было - нет проблем с самими данными.Как получить DataGridView для рендеринга?

Моя проблема заключается в том, что при переходе с предыдущего шага DataGridView не отображается правильно. Он по-прежнему показывает предыдущий шаг, на котором должны быть данные, и отображает только данные при выборе ячеек (отдельных ячеек, где он отображает эту ячейку (когда я нахожу мышь над readonly = ложными ячейками или нажимает на ячейки readonly = true) или выбор всей таблицы). Скриншоты ниже:

Когда экран сначала сделать:

when the screen is first rendered

Когда я выбрал все клетки:

when the cells are selected

я пробовал программно выбрать все ячейки (используя datagridview1.SelectAll()) после того, как я заполнил DataGridView, но это не имеет никакого значения. Я также пробовал использовать метод datagridview1.Select() и настройку datagridview1.CurrentCell = datagridview1.Rows[0].Cells[0].

Я не уверен, что это может быть разрешено с помощью кода - есть ли способ убедиться, что ячейки отображаются правильно или это проблема с моей локальной машиной?

+0

Ничего из этого не должно быть необходимым. Поэтому вам нужно выяснить причину. Является ли DGV в «TabPage»? Они, как правило, блокируют отображение обновлений до тех пор, пока страница не будет выбрана. Обычно достаточно называть 'datagridview1.Refresh()'. – TaW

+0

@TaW Он находится в 'TabPage', но метод' Refresh() 'не обновляет его ... Есть ли другой способ обновить интерфейс? – Charlotte

+0

__When__ вы называете Refresh? Его нужно называть __after__, страница показана! – TaW

ответ

1

Если вы загрузили данные, когда контейнер был скрыт в , то не выбраноTabPage Обновления на дисплее заблокированы.

Чтобы привести его жить можно закодировать Selected событие:

private void tabControl1_Selected(object sender, TabControlEventArgs e) 
{ 
    foreach (Control ctl in tabControl1.SelectedTab.Controls) ctl.Refresh(); 
} 
+0

Я использовал этот код точно, но я все еще получаю ту же проблему. Я пробовал обновлять все элементы управления в событии 'Selected' и событии' SelectedIndexChanged' без везения ... – Charlotte

+0

Хм, странно. Пожалуйста, только для __test__, положите 'Button' на страницу и' datagridview1.Refresh(); 'в своем клик-событии. - Также: приведенный выше код __assumes__, что DGV сидит __directly__ на TabPage, __not nested__ в любом другом элементе управления, например Groupbx, Panel, Slittcontainer или любом другом контейнере! – TaW

+0

Это сработало! Я собираюсь поэкспериментировать с функцией 'Refresh()' в различных вызовах - возможно, 'tabPage1.Focus(). Спасибо за вашу помощь! – Charlotte

Смежные вопросы