Paramu1973 Ответов: 2

Как установить DataGridView - FirstDisplayedScrollingRowIndex ?


Привет,
С моей Form_Load() Я хочу установить свою 150-ю строку в качестве моей TopRow, в то время как DataGridView становится видимым. Для этого, когда я настраиваю свойство currentcell, оно работает нормально. нет проьлем.
Но когда я пытаюсь использовать свойство FirstDisplayedScrollingRowIndex (), оно не работает.

Это Не Работает

dataGridView1.Rows[150].Selected = true;
dataGridView1.FirstDisplayedScrollingRowIndex = 150;
dataGridView1.Focus();


Но нижеследующее работает

dataGridView1.Rows[150].Selected = true;
dataGridView1.CurrentCell = dataGridView1.Rows[150].Cells[0];
dataGridView1.Focus(); 


Спасибо За Помощь

2 Ответов

Рейтинг:
14

Jason Gleim

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

Трюк, который я использовал раньше, заключается в том, чтобы отделить выбор от обработчика событий загрузки формы. В классе формы добавьте таймер. (Если вы делаете это в Silverlight или WPF, добавьте раскадровку) В обработчике событий Form_Load установите время на 1 секунду или раскадровку на один кадр, а затем запустите его на выходе из обработчика событий загрузки формы. (пусть это будет последний звонок)

В обработчике событий для таймера или раскадровки вы должны иметь возможность установить индекс строки. Если вам нужно использовать таймер, помните, что события таймера происходят в другом потоке, и вы должны маршалировать их в поток пользовательского интерфейса, вызывая делегат. (Есть примеры этого из CodeProject) Раскадровка в SL & WPF автоматически маршалирует этот вызов, так что вам не придется беспокоиться об этом.

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


paultraite

Я думаю, что вы также можете сделать это в форме.Показанное событие

Рейтинг:
1

Member 13721048

FirstDisplayedScrollingRowIndex 
работаешь на меня