none
Выделение строки с определенным содержанием в DataGrid WPF RRS feed

  • Вопрос

  • Загружаю в DataGrid таблицу из базы данных. Необходимо предоставить пользователю возможность поиска в этой таблице по ключу. Для этого пишу следующий код:

     

                    foreach (DataRowView dataRowView in My_dataGrid.Items)
                    {
                        if (dataRowView[AnyColumnName].ToString() == UsersKeyValue)
                        {
                            My_dataGrid.SelectedValue = dataRowView; break;
                        }
                    }
    

     

    Поиск отлично проходит и замечательно срабатывает, заходим в границы условного оператора, выполняем команду My_dataGrid.SelectedValue=dataRowView, только почему-то строка с найденным значением не выделяется. Пробовал задать её в рукопашную с помощью SelectedIndex - отлично работает, но как получить номер строки, в которой содержится требуемое значение?!

    Может кто сталкивался с таким и знает как решить проблему? Что не так и как можно превратить данный код в работоспособный?


    • Изменено Maximys33 22 сентября 2011 г. 6:12
    • Перемещено ulcerModerator 22 сентября 2011 г. 7:06 (От:Языки программирования)
    22 сентября 2011 г. 6:11

Ответы

  • Попробуй вот так:

                    foreach (DataRowView dataRowView in My_dataGrid.Items)
                    {
                        if (dataRowView[AnyColumnName].ToString() == UsersKeyValue)
                        {
                            My_dataGrid.SelectedIndex = My_dataGrid.Items.IndexOf(dataRowView); 
                            break;
                        }
                    }
    


    • Предложено в качестве ответа Abolmasov Dmitry 22 сентября 2011 г. 7:47
    • Помечено в качестве ответа Maximys33 22 сентября 2011 г. 7:51
    22 сентября 2011 г. 7:38
    Модератор

Все ответы

  • Попробуй вот так:

                    foreach (DataRowView dataRowView in My_dataGrid.Items)
                    {
                        if (dataRowView[AnyColumnName].ToString() == UsersKeyValue)
                        {
                            My_dataGrid.SelectedIndex = My_dataGrid.Items.IndexOf(dataRowView); 
                            break;
                        }
                    }
    


    • Предложено в качестве ответа Abolmasov Dmitry 22 сентября 2011 г. 7:47
    • Помечено в качестве ответа Maximys33 22 сентября 2011 г. 7:51
    22 сентября 2011 г. 7:38
    Модератор
  • Например перебирать не foreach, а for. Или завести переменную счетчик.


    Для связи [mail]
    22 сентября 2011 г. 7:46
  • Попробуй вот так:

     

                    foreach (DataRowView dataRowView in My_dataGrid.Items)
                    {
                        if (dataRowView[AnyColumnName].ToString() == UsersKeyValue)
                        {
                            My_dataGrid.SelectedIndex = My_dataGrid.Items.IndexOf(dataRowView); 
                            break;
                        }
                    }
    


     


    Благодарю, только нужно еще немного модифицировать и этот код следующим образом:

                    foreach (DataRowView dataRowView in My_dataGrid.Items)
                    {
                        if (dataRowView[AnyColumnName].ToString().TrimEnd(' ') == UsersKeyValue)   //добавить выполнение метода TrimEnd(' '), который удалит вставленные SQLServer'ом знаки пробела с конца, когда введенная количество введенных символов меньше, чем заданное в таблицах БД
                        {
                            My_dataGrid.SelectedIndex = My_dataGrid.Items.IndexOf(dataRowView); 
                            break;
                        }
                    }


    22 сентября 2011 г. 7:50