Программно выберите объект у Asp. Сетевой ListView

Вы только создали переменную phrasedocs в функции. Поэтому переменная не определена для всего вашего другого кода за пределами этой функции. Когда вы вызываете переменную в качестве входных данных для функции, python не может найти переменную с таким именем. Вы должны создать переменную phrasedocs в своем основном коде.

6
задан Armstrongest 15 March 2010 в 18:03
поделиться

4 ответа

Я посмотрел на часть из того, что продолжается в ListView под капотом, и думайте, что это - вероятно, лучший подход.

void listView_ItemCreated(object sender, ListViewItemEventArgs e)
{
    // exit if we have already selected an item; This is mainly helpful for
    // postbacks, and will also serve to stop processing once we've found our
    // key; Optionally we could remove the ItemCreated event from the ListView 
    // here instead of just returning.
    if ( listView.SelectedIndex > -1 ) return; 

    ListViewDataItem item = e.Item as ListViewDataItem;
    // check to see if the item is the one we want to select (arbitrary) just return true if you want it selected
    if (DoSelectDataItem(item)==true)
    {
        // setting the SelectedIndex is all we really need to do unless 
        // we want to change the template the item will use to render;
        listView.SelectedIndex = item.DisplayIndex;
        if ( listView.SelectedItemTemplate != null )
        {
            // Unfortunately ListView has already a selected a template to use;
            // so clear that out
            e.Item.Controls.Clear();
            // intantiate the SelectedItemTemplate in our item;
            // ListView will DataBind it for us later after ItemCreated has finished!
            listView.SelectedItemTemplate.InstantiateIn(e.Item);
        }
    }
}

bool DoSelectDataItem(ListViewDataItem item)
{
    return item.DisplayIndex == 0; // selects the first item in the list (this is just an example after all; keeping it simple :D )
}

Примечания

  • ListView выбирает шаблон, который будет использовать объект после того, как это будут огни события DataBinding. Таким образом, если SelectedIndex установлен к тому времени, больше работы не необходимо
  • Устанавливая SelectedIndex где угодно после работ DataBinding, Вы просто не получаете SelectedItemTemplate. Для этого Вы имеете, любой снова переплетает данные; или повторно инстанцируйте SelectedItemTemplate на ListViewItem. убедиться очистить ListViewItem. Набор средств управления сначала!

ОБНОВЛЕНИЕ я удалил большую часть своего исходного решения, так как это должно работать лучше и на большее количество случаев.

13
ответ дан 8 December 2019 в 05:24
поделиться
list.SelectedIndex = list.Items.IndexOf(item);
3
ответ дан 8 December 2019 в 05:24
поделиться

Подробно останавливаясь @Jeremy и ответы @bendewey, Вы не должны должны быть делать это в ItemDataBound. У Вас только должен быть ListView, связывающий, уже произошли перед установкой SelectedValue. Необходимо смочь сделать это во время PreRender. Посмотрите этот жизненный цикл страницы документы для получения дополнительной информации о том, когда привязка произойдет.

2
ответ дан 8 December 2019 в 05:24
поделиться

Можно установить ListViews SelectedIndex

list.SelectedIndex = dataItem.DisplayIndex; // don't know which index you need
list.SelectedIndex = dataItem.DataItemIndex; 

Обновление

Если Ваша загрузка данных по загрузке страницы, Вам, вероятно, придется пересечь данные для нахождения индекса затем, установила значение SelectedIndex прежде, чем назвать DataBind () методом.

public void Page_Load(object sender, EventArgs e)
{
  var myData = MyDataSource.GetPeople();
  list.DataSource = myData;
  list.SelectedIndex = myData.FirstIndexOf(p => p.Name.Equals("Bob", StringComparison.InvariantCultureIgnoreCase));
  list.DataBind();
}


public static class EnumerableExtensions
{
    public static int FirstIndexOf<T>(this IEnumerable<T> source, Predicate<T> predicate)
    {
        int count = 0;
        foreach(var item in source)
        {
            if (predicate(item))
                return count;
            count++;
        }
        return -1;
    }
}
5
ответ дан 8 December 2019 в 05:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: