将Multiple Select Listbox的SelectedIndex更改为最后选择的项目

时间:2011-01-18 03:55:49

标签: c# .net asp.net listbox

引用C#,。net,System.Web.UI.WebControls.Lisbox,它具有多个选择选项true,并且每次选择的索引更改时都需要进行回发。

问题是,[SelectedIndex / SelectedItem / SelectedValue]始终位于第一个选定项目的值上。单击第二个项目,第三个项目,不会更改SelectedIndex,导致列表框重新加载并滚动到选定的最高项目位置。

5 个答案:

答案 0 :(得分:0)

Brandon - 您可以共享加载列表框的代码吗?以下是ListBox不能保留其选择的几个可能原因:

  1. 回发中重新加载列表框(已处理过帖子数据后)
  2. 在页面生命周期的后期动态加载列表框,以便没有机会处理回发数据
  3. 动态加载列表框(可能在模板化父级中),以便其客户端ID发生更改(具体而言,发布数据后处理时ClientID不同)。

答案 1 :(得分:0)

SelectedIndex将始终指向所选的最低索引。 ListBox.SelectedIndex属性的定义:

获取或设置列表中所选项目的最低序号索引。

手动设置selectedindex属性将取消选择所有其他选项,我很确定没有办法(在.net代码中)向下滚动到特定选择。

我没有清楚了解您正在尝试做什么,但也许您可以使用GetSelectedIndices ListBox函数捕获所有选定的索引,并与之前捕获的选定索引进行比较以确定最近选择的项目。

答案 2 :(得分:0)

Brandon确保每次加载页面时都不填充ListBox

答案 3 :(得分:0)

就这种控制而言,没有办法做到这一点。

答案 4 :(得分:0)

这绝对是一个滚动问题。

要显式控制ListBox(或任何元素)的滚动值,您需要使用JavaScript来设置scrollTop属性:

document.all.getElementById("elementID").scrollTop = VALUE.

所以改变为你的列表框做回发的JavaScript处理程序,看起来像“javascript:__ doPostBack(...”。用一个自定义函数调用替换它来抓取当前的scrollTop值,保存它到一个隐藏的变量,然后调用__doPostBack,就像它原来应该的那样。

在往返之后,该隐藏值应该保留回客户端,因此在JavaScript页面加载事件中,只需读取该隐藏值并将其重新应用于列表框的scrollTop。然后,您的列表框将完全滚动到发布回发之前的位置。