以编程方式选择 Asp.Net ListView 中的项目
经过快速搜索后,我找不到这个看似简单的事情的答案。
如何在 Asp.Net ListView 中手动选择项目?
我有一个 SelectedItemTemplate,但我不想使用 asp:button 或 asp:LinkButton 来选择项目。 我希望它可以从 URL 完成。 例如,像查询字符串一样。
我想象的方式是在 ItemDataBound 上,检查一个条件,然后将其设置为选中(如果为 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!!!
}
}
}
}
我确定它只是一两行代码。
编辑:我已经更新了代码以反映解决方案,似乎我可以选择 ListView 的 SelectedItemIndex,但是,它实际上并未呈现 SelectedItemTemplate。 我不知道是否应该在 ItemDataBound 事件中执行此操作如下建议。
After doing a quick search I can't find the answer to this seemingly simple thing to do.
How do I Manually Select An Item in an Asp.Net ListView?
I have a SelectedItemTemplate, but I don't want to use an asp:button or asp:LinkButton to select an item. I want it to be done from a URL. Like a QueryString, for example.
The way I imagine would be on ItemDataBound, check a condition and then set it to selected if true, but how do I do this?
For example:
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!!!
}
}
}
}
I'm sure it's one or two lines of code.
EDIT: I've updated the code to reflect the solution, and it seems that I can select the ListView's SelectedItemIndex, however, it's not actually rendering the SelectedItemTemplate. I don't know if I should be doing this in the ItemDataBound event as suggested below.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我查看了 ListView 底层发生的一些事情,认为这可能是最好的方法。
注释
更新 我已经删除了大部分原始解决方案,因为这应该可以更好地工作并适用于更多情况。
I looked at some of what's going on in ListView under the hood and think this is probably the best approach.
NOTES
UPDATE I have removed most of my original solution, since this should work better and for more cases.
您可以设置 ListViews SelectedIndex
更新
如果您在页面加载时加载数据,您可能必须遍历数据以查找索引,然后在调用 DataBind() 方法之前设置 SelectedIndex 值。
You can set the ListViews SelectedIndex
Update
If your loading the data on page load you may have to traverse the data to find the index then set the SelectedIndex value before calling the DataBind() method.
扩展 @Jeremy 和 @bendewey 的答案,您不需要在 ItemDataBound 中执行此操作。 您只需要在设置 SelectedValue 之前已经进行 ListView 绑定即可。 您应该能够在 PreRender 期间执行此操作。 有关何时进行绑定的详细信息,请参阅此页面生命周期文档 。
Expanding on @Jeremy and @bendewey's answers, you shouldn't need to do this in ItemDataBound. You only need to have the ListView binding already have taken place before you set the SelectedValue. You should be able to do this during PreRender. See this page life cycle docs for more information on when binding takes place.