ASP.NET:CheckBoxList和OnSelectedIndexChanged的问题

时间:2009-05-20 14:07:02

标签: c# asp.net

我遇到了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始终是列表中的第一个元素???

1 个答案:

答案 0 :(得分:2)

所选项属性将返回列表中具有最低索引的所选项。如果选择了第一个项目,则它将返回第一个项目。

要获取最新选择的项目,您可以创建一个全局变量并在索引更改时设置该变量。您可以创建一个ListItem集合,该集合首先保存所有初始选定的索引,如Kirtan建议的,然后创建一个新集合,在所选索引更改时保存所有最新选择。匹配这两个列表,新列表中不在旧列表中的任何项目都是您最新选择的索引。

希望这有帮助。