ASP.NET ListView无法动态触发SelectedIndexChanging

时间:2011-11-14 00:52:40

标签: c# asp.net events listview listviewitem

protected void pnlFriends_Click(object sender, EventArgs e)
{
    ClickablePanel pnlFriends = sender as ClickablePanel;
    lvFriends.SelectedIndex = ((ListViewItem)pnlFriends.Parent).DisplayIndex;
}

未达到以下条件:

protected void lvFriends_SelectedIndexChanging(object sender,  
ListViewSelectEventArgs e)
{
    GetConversation(lvFriends.DataKeys[e.NewSelectedIndex][0].ToString());
}

为什么?我曾经使用.Selected = true来使用WinForms。但是,看起来绝对没有办法动态触发ListViewSelectedIndexChanging事件。

任何想法我怎样才能让它正常工作?谢谢。

修改

我正在尝试选择ListView项目,以及索引更改时。我试图在同一页面上填充第二个ListView。我需要在索引发生变化时处理第一个事件。

更新(已解决)

protected void lvFriends_SelectedIndexChanging(object sender,  ListViewSelectEventArgs e)
{
    lvFriends.SelectedIndex = e.NewSelectedIndex;
    lvFriends.DataSource = Friendship.GetFriends(User.Identity.Name, false);
    lvFriends.DataBind();
    GetConversation(lvFriends.DataKeys[e.NewSelectedIndex][0].ToString());
}

protected void pnlFriends_Click(object sender, EventArgs e)
{
    ClickablePanel pnlFriends = sender as ClickablePanel;
    lvFriends.SelectItem(((ListViewItem)pnlFriends.Parent).DisplayIndex);
}

^完美无瑕地工作。 我想不知怎的,。SelectItem触发ListViewSelectEventArgs我们必须通过设置.SelectedIndex = e.NewSelectedIndex;来处理它,然后重新绑定数据以正确显示所选项目。

现在我可以用上面的代码做的就是调用它 - > lvFriends.SelectItem(int);

2 个答案:

答案 0 :(得分:1)

这与ASP.Net页面生命周期业务有关。 “lvFriends_SelectedIndexChanging”事件和“pnlFriends_Click”事件发生在同一生命周期中。基本上在回发后,asp.net会检查lvlFriends索引是否已更改。事实并非如此,它继续发布其他事件。现在它处于生命周期的下一个阶段。它正在处理“pnlFriends_Click”事件。它为它进行处理。如果碰巧做了改变lvlFriends索引的事情,它就不会被捕获。在处理来自一组控件的事件后,ASP.Net页面生命周期不会返回,以查看该处理是否导致其他控件上的事件。

但是要实现你想要的,而不是改变索引或期望触发事件。您必须明确调用该方法。

protected void pnlFriends_Click(object sender, EventArgs e)
{
    ClickablePanel pnlFriends = sender as ClickablePanel;
    lvFriends.SelectedIndex = ((ListViewItem)pnlFriends.Parent).DisplayIndex;
    lvFriends_SelectedIndexChanging(lvFriends, new ListViewSelectEventArgs() {// TODO: build the event args object properly});
}

答案 1 :(得分:-1)

protected void lvFriends_SelectedIndexChanging(object sender,  ListViewSelectEventArgs e)
{
    lvFriends.SelectedIndex = e.NewSelectedIndex;
    lvFriends.DataSource = Friendship.GetFriends(User.Identity.Name, false);
    lvFriends.DataBind();
    GetConversation(lvFriends.DataKeys[e.NewSelectedIndex][0].ToString());
}

protected void pnlFriends_Click(object sender, EventArgs e)
{
    ClickablePanel pnlFriends = sender as ClickablePanel;
    lvFriends.SelectItem(((ListViewItem)pnlFriends.Parent).DisplayIndex);
}

另外,请检查原始问题! ;)