Поиск элемента в asp.ListView со значением при включенной подкачке - PullRequest
3 голосов
/ 29 июля 2011

Я пытаюсь найти выбранный элемент в aspx ListView, который находится на отдельной странице, затем переключить страницу и выбрать элемент.У меня есть свойство value ListViewItem, которое я ищу, но не могу заставить его работать.Вот что я попробовал:

for (int i = 0; i < lvProject.Items.Count; i++)
{
    if (((Label)lvProject.Items[i].FindControl("Project_IDLabel")).Text == project.ToString())
    {
        lvProject.SelectItem(i);
        break;
    }
}

Итак, lvProject - мой список.Переменная проекта - это Int64, которая представляет UID моего проекта.Это также значение моих ListViewItems.Проблема с приведенным выше кодом заключается в том, что при включенном разбиении на страницы и на том, что элемент находится на другой странице, это не будет работать, поскольку для listView.Items.Count задано только количество элементов на текущей странице.

Моя цель - найти элемент, настроить просмотр списка для отображения правильной страницы и, наконец, выбрать элемент.Вы могли бы подумать, что я мог бы просто установить свойство SelectedValue, но это не так просто, как только для чтения.Любые идеи очень помогли бы, спасибо заранее.

- Роман

Ответы [ 3 ]

2 голосов
/ 05 декабря 2012

Чтобы получить общее количество записей из источника данных объекта, следует использовать событие Selected следующим образом:

protected void ObjectDataSource1_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
    // Get total count from the ObjectDataSource
    DataTable dt = e.ReturnValue as DataTable;
    if (dt != null) recordCount = dt.Rows.Count; // recordCount being declared outside the method
}

После этого вы сможете выполнить поиск элемента следующим образом:

for (int i = 0; i < recordCount; i++)
{
    Label lblItem = (Label)lvProject.Items[i].FindControl("IdLabel");
    if (lblItem.Text.Equals(itemToSearch))
    {
        lvProject.SelectedIndex = i;
        break;
    }
}

Надеюсь, это поможет!

0 голосов
/ 29 июля 2011

Вы должны установить для свойства SelectedIndex значение i

for (int i = 0; i < lvProject.Items.Count; i++)
{
    if (((Label)lvProject.Items[i].FindControl("Project_IDLabel")).Text == project.ToString())
    {
        lvProject.SelectedIndex = i;
        break;
    }
 }
0 голосов
/ 29 июля 2011

Как вы связываете элементы ListView?

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