2015-07-21 6 views
0

У меня есть форма с DataGridView на нем, который получает заполняется в форме-х Constructor из DataSource с помощью адаптера данных (AdsDataAdapter). Он показывает first name, surname и reference number (который является основным ключом базовой таблицы в базе данных). Однако строки в DataGridView упорядочены по полю surname (с использованием предложения ORDER BY в операторе SELECT, который передается адаптеру данных).настройки выбранной строки программно для DataGridRow (не используя индекс!)

После DataGridView населен, я хочу, чтобы иметь возможность ввести в TextBox в surname и имеют DataGridView перейти к первому ряду, где первые буквы surname соответствует тому, что типы пользователей.

Как мне сделать эту навигацию?

+0

@ user5129991: Вы знаете, что вы можете выбрать ответ на свой вопрос? – CharithJ

ответ

1

"навигации" решение

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    for (int i=0;i<theDataGridView.RowCount;i++) 
    { 
    if (theDataGridView.Rows[i].Cells["surname"].Value.ToString().StartsWith(textBox1.Text)) 
    { 
     theDataGridView.CurrentCell = theDataGridView.Rows[i].Cells["surname"]; 
     // optionally 
     theDataGridView.FirstDisplayedScrollingRowIndex = theDataGridView.CurrentCell.RowIndex; 
     break ; 
    } 
    } 
} 

"Фильтр" решение

Во-первых, связать ваш DataTable к DataGridView через BindingSource.

BindingSource theBindingSource = new BindingSource() ; 
theBindingSource.DataSource = theDataTable ; 
theDataGridView.DataSource  = theBindingSource ; 

Затем установите фильтр свойство BindingSource в случае TextChanged:

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    theBindingSource.Filter = "surname LIKE '"+textBox1.Text+"%'"; 
    // if no match : Cancel filter 
    if (theDataGridView.RowCount==0) theBindingSource.Filter = "" ; 
} 
+0

Я предложил изменение для исправления некоторых ошибок в вашем коде, а также предложил добавить к вашему методу * Navigate * «theDataGridView.FirstDisplayedScrollingRowIndex = theDataGridView.CurrentCell.RowIndex;», поскольку он будет более визуально выполнять требование OP: * перейти к первой строке * [...] ". – OhBeWise

+1

Настройка выбранной строки как первой видимой, возможно, более удобна для пользователя. Используя множество DataGridViews, я никогда не делал этого при выборе CurrentCell и никогда не получал обратной связи, чтобы отображать его как первую видимую строку. В предлагаемой модификации вы ввели «%» между «LIKE» и TextBox.text, но я не сохранил его, потому что запрос был скорее «StartsWith», чем «Contains». – Graffito

+0

А, хороший улов на дополнительном '%', я, должно быть, смотрел на другой ответ, когда тестировал это в фильтре. Извини за это. – OhBeWise

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

  • Нет связанных вопросов^_^