2015-12-04 4 views
0

У меня есть DataGridView как часть формы, которая, когда все ее строки заполняются, должна выбрать последнюю строку по умолчанию.DataGridView не выбирает последнюю строку при загрузке

public MyForm() 
{ 
    InitializeComponent(); 
    Reload(); 
} 

private void Reload() 
{ 
    // add/populate the rows here 

    if(dgv.Rows.Count > 0) 
    { 
     dgv.Rows[dgv.Rows.Count - 1].Selected = true; 
    } 
} 

У меня есть SelectionMode набор для FullRowSelect и MultiSelect является false.

Кто-нибудь знает, почему это не работает? Первая строка всегда выбирается при появлении формы.

ответ

1

Эта проблема связана с Order of Events in Windows Forms при загрузке Form. Если вы вызываете Reload() в конструкторе Form, элементы управления формами еще не имели возможности загрузить. Экземпляры из них существуют, но не созданные объекты.

Вместо этого вы должны переопределить одно из других событий загрузки формы, например OnLoad, и позвонить по телефону Reload(). Удалите вызов из вашего конструктора Reload().

public MyForm() 
{ 
    InitializeComponent(); 
} 

protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 
    Reload(); 
} 

private void Reload() 
{ 
    // add/populate the rows here 
    if(dgv.Rows.Count > 0) 
    { 
     dgv.Rows[dgv.Rows.Count - 1].Selected = true; 
    } 
} 

Использование этого метода гарантирует, что ваши элементы управления завершили загрузку, прежде чем вы начнете ими манипулировать.

+0

Yup, это сработало. Благодаря! –

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