2009-05-20 114 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集合,該集合首先保存所建議的所有初始選定索引,然後創建一個新集合,該集合在選定索引更改時保存所有最新選擇。匹配兩個列表,並且新列表中不在舊列表中的任何項目都是最新選定的索引。

希望這會有所幫助。