2013-12-03 3 views
0

Использование C#, WinFormsРазъяснение о том, как выбрать конкретную строку в представлении DataGrid

Я хочу, чтобы пользователю ввести номер в текстовом поле. Если номер содержится в первом столбце моего представления datagrid, то эта строка должна быть подсвечена или всплывать, или свиток datagridview дойдет до него, чтобы пользователь мог ее увидеть (вы, ребята, меня интересуют)

I собирался вокруг SO о том, как достичь этого, и я пытался использовать определенную технику, но Я получаю сообщение об ошибке: «Ссылка на объект не установлена ​​в экземпляр объекта». для переменной searchVal В если утверждение моего кода ниже:

private void button3_Click_1(object sender, EventArgs e) 
    { 
     String searchVal = textBox1.Text; 
     for (int i = 0; i < dataGridView1.RowCount; i++) 
     { 

       if (dataGridView1.Rows[i].Cells[0].Value.ToString().Contains(searchVal)) 
       { 
        // Also Is this how to make the row highlighted? 
        dataGridView1.Rows[i].Cells[0].Selected = true; 
       } 

     } 
    } 
+1

Что вы имеете в виду ' для переменной searchVal'? Инициализация или строка с помощью 'Contains (searchVal)'? –

+0

@ P.Brian.Mackey Содержит (searchVal) – Newuser

ответ

1

Вы должны проверить null значение для ячейки, учитывая, что вы иметь по крайней мере одну ячейку в вашей строке, вы проверяете должны быть:

if (dataGridView1.Rows[i].Cells[0].Value != null && 
    dataGridView1.Rows[i].Cells[0].Value.ToString().Contains(searchVal)) 

Вы также можете добавить проверку для проверки Cell Count, как:

if (dataGridView1.Rows[i].Cells.Count > 0 && 
    dataGridView1.Rows[i].Cells[0].Value != null && 
    dataGridView1.Rows[i].Cells[0].Value.ToString().Contains(searchVal)) 
+0

Это работает как ответ, но несколько связанный с этим вопрос: как я могу выбрать целую строку, прокрутить вниз до нее? Скажите, что выбранная строка находится ниже, и пользователю нужно прокручивать ее. Есть ли способ прокрутки к определенной строке, содержащей searchVal? – Newuser

+1

@Newuser вы можете использовать свойство DataGridView.FirstDisplayedScrollingRowIndex http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.firstdisplayedscrollingrowindex%28v=vs.110%29.aspx –

+1

Вы можете следовать эта ссылка для вашего требования прокрутки, основанная на матче http://stackoverflow.com/questions/795181/how-do-i-position-a-datagridview-to-a-specific-row-so-that-the-selected- row-is – Riz

1

Проверьте dataGridView1 для опции «добавить строки», потому что с его причиной тыс e n + 1 count count, когда for for выполняется, переходит в n + 1, который является нулевым, также может сделать все вышеперечисленное.

reagrding фокус вам нужно изменить

dataGridView1.Rows[i].Cells[0].Selected = true; 

в

dataGridView1.Rows[i].Selected = true; 
dataGridView1.CurrentCell = dataGridView1[0, i]; 
break; 

, потому что вы пытаетесь сосредоточиться строку я думаю

наилучшими пожеланиями

+0

оригинальная проблема решена, но теперь у меня есть другой вопрос. Как я могу использовать свойство FirstDisplayedScrollingRowIndex в своем коде для перехода к выбранной строке? – Newuser

+1

попробуйте эти данныеGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.Rows [i] .Index; – Odin369

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