На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Поиск строки в "отфильтрованной" таблице
    Добрый день.

    Подскажите как можно найти строку в DataTable после применения DataTable.DefaultView.RowFilter ?

    Объясню подробнее. Если в таблице искать по ключевому полю значение с помощью:
    ExpandedWrap disabled
      DataRow row = table.Rows.Find("OurKey");
      int rowIndex = table.Rows.IndexOf(row);

    То мы получаем строку, в которой есть искомое значение "OurKey". С этим все понятно.

    Далее применяем определенный фильтр, чтобы отсеять ненужные записи:
    ExpandedWrap disabled
      table.DefaultView.RowFilter = "TestField>10";

    Теперь в связанном с DataTable гриде отобразятся только нужные записи.

    Вопрос в том, как теперь найти порядковый номер требуемой записи, чтобы можно было его выделить в датагриде?
    Поиск по ключевому полю int rowIndex = table.Rows.IndexOf(row); отдает индекс строки исходной таблицы, а не отфильтрованной. Как найти порядковый номер строки уже ПОСЛЕ применения фильтра?
      Вроде как нашел решение.
      У меня ключевое поле в первом столбце, по нему же таблица и отсортирована.

      Таким способом получается найти индекс нужной строки в отфильтрованной таблице и выделить искомую строку:
      ExpandedWrap disabled
        DataView custView = table.DefaultView;
        // Сортировка по первому полю таблицы
        custView.Sort = custView.Table.Columns[0].ColumnName;
         
        // Определяем индекс искомой строки
        int rowIndex = custView.Find("FindThisValue");                
        if (rowIndex > -1)
        {
           testDataGridView.CurrentCell = testDataGridView[0, rowIndex];
        }
      2 пользователей читают эту тему (2 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0146 ]   [ 15 queries used ]   [ Generated: 21.05.24, 18:03 GMT ]