我遇到了CheckBoxList和OnSelectedIndexChanged:
的问题 <asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:CheckBoxList
id="lstWatchEType"
runat="server"
DataTextField="DescriptionText"
DataValueField="Id"
AutoPostBack="true"
OnSelectedIndexChanged="lstWatchEType_SelectedIndexChanged"/>
</ContentTemplate>
</asp:UpdatePanel>
这是在Page_Load(!IsPostBack)
中填充的public static void PopulateWatchEType(CheckBoxList list, Guid clientId)
{
OffertaDataContext db = new OffertaDataContext();
var ds = (from e in db.EnquiryTypes select new {
Id = e.Id,
DescriptionText = e.DescriptionText,
IsWatching = !db.WatchXrefEnquiryTypes.Any(f => f.ClientId.Equals(clientId) && f.EnquiryTypeId==e.Id && f.Inbox==false)
});
list.DataSource = ds;
list.DataBind();
foreach(var item in ds)
{
list.Items.FindByValue(item.Id.ToString()).Selected = item.IsWatching;
}
}
我的问题在于:
protected void lstWatchEType_SelectedIndexChanged(Object sender, EventArgs e)
{
ListItem item = lstWatchEType.SelectedItem;
...
}
其中item始终是列表中的第一个元素???
答案 0 :(得分:2)
所选项属性将返回列表中具有最低索引的所选项。如果选择了第一个项目,则它将返回第一个项目。
要获取最新选择的项目,您可以创建一个全局变量并在索引更改时设置该变量。您可以创建一个ListItem集合,该集合首先保存所有初始选定的索引,如Kirtan建议的,然后创建一个新集合,在所选索引更改时保存所有最新选择。匹配这两个列表,新列表中不在旧列表中的任何项目都是您最新选择的索引。
希望这有帮助。