gpt4 book ai didi

c# - 以编程方式在 Asp.Net ListView 中选择项目

转载 作者:太空狗 更新时间:2023-10-29 20:47:13 26 4
gpt4 key购买 nike

快速搜索后,我找不到这个看似简单的事情的答案。

如何在 Asp.Net ListView 中手动选择项目?

我有一个 SelectedItemTemplate,但我不想使用 asp:button 或 asp:LinkBut​​ton 来选择项目。我希望它通过 URL 完成。例如,像 QueryString。

我想象的方式是在 ItemDataBound 上,检查一个条件,然后将其设置为 selected if true,但我该怎么做呢?

例如:

protected void lv_ItemDataBound(object sender, ListViewItemEventArgs e) {

using (ListViewDataItem dataItem = (ListViewDataItem)e.Item) {

if (dataItem != null) {
if( /* item select condition */ ) {

// What do I do here to Set this Item to be Selected?
// edit: Here's the solution I'm using :
((ListView)sender).SelectedIndex = dataItem.DisplayIndex;

// Note, I get here and it gets set
// but the SelectedItemTemplate isn't applied!!!

}
}
}
}

我确定这是一两行代码。

编辑: 我已经更新了代码以反射(reflect)解决方案,似乎我可以选择 ListView 的 SelectedItemIndex,但是,它实际上并没有呈现 SelectedItemTemplate。我不知道我是否应该在 ItemDataBound 事件中执行此操作如下所示

最佳答案

我查看了 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,则无需再做任何工作
  • 在 DataBinding 工作后的任何地方设置 SelectedIndex,您只是得不到 SelectedItemTemplate。为此,您要么重新绑定(bind)数据;要么或者在 ListViewItem 上重新实例化 SelectedItemTemplate。 一定要先清除 ListViewItem.Controls 集合!

更新我已经删除了我原来的大部分解决方案,因为这应该会更好地适用于更多情况。

关于c# - 以编程方式在 Asp.Net ListView 中选择项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/570801/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com