2009-05-20 45 views
0

我在与CheckBoxList的问题,OnSelectedIndexChanged: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中填充

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; 
      } 
     } 

我的问题是(的IsPostBack!) :

protected void lstWatchEType_SelectedIndexChanged(Object sender, EventArgs e) 
    { 
     ListItem item = lstWatchEType.SelectedItem; 
     ... 
    } 

其中item总是列表中的第一个元素???

+0

你可以看看亚伦的回答,我已经删除了我的。 – Kirtan 2009-05-21 04:30:34

回答

2

所选项目属性将返回列表中最低索引的所选项目。如果第一个项目被选中,那么它将返回第一个项目。

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

希望这会有所帮助。