2012-04-07 41 views
0

我有一個跳舞學院的網站,用戶可以在其中註冊和添加/刪除舞蹈班。使用linq查詢將值存儲在下拉列表的DataValueField和DataTextField中

在網頁上放棄特定的舞蹈,對於特定用戶,下拉菜單顯示她註冊的舞蹈。

現在我想從列表中刪除一個舞蹈。所以我會從表格中刪除該行,並從下拉列表中刪除。問題在於每次具有最低ID(索引)的項目都被刪除,無論用戶選擇哪一個。我認爲我錯誤地爲下拉式存儲了DataTextField和DataValueField。該代碼是:

private void PopulateDanceDropDown() 
{  
     // Retrieve the username 
     MembershipUser currentUser = Membership.GetUser(); 
     var username = currentUser.UserName; 

     // Retrive the userid of the curren user 
     var dancerIdFromDB = from d in context.DANCER 
          where d.UserName == username 
          select d.UserId; 

     Guid dancerId = new Guid(); 
     var first = dancerIdFromDB.FirstOrDefault(); 
     if (first != null) 
     { 
      dancerId = first; 
     } 

     dances.DataSource = (from dd in context.DANCER_AND_DANCE 
            where dd.UserId == dancerId 
            select new 
            { 
             Text = dd.DanceName, 
             Value = dd.DanceId 
            }).ToList(); 

     dances.DataTextField = "Text"; 
     dances.DataValueField = "Value"; 
     dances.DataBind(); 
    } 

    protected void dropthedance(object o, EventArgs e) 
    { 
     String strDataValueField = dances.SelectedItem.Value; 
     int danceIDFromDropDown = Convert.ToInt32(strDataValueField); 
     var dancer_dance = from dd in context.DANCER_AND_DANCE 
          where dd.DanceId == danceIDFromDropDown 
          select dd; 

     foreach (var dndd in dancer_dance) 
     { 
      context.DANCER_AND_DANCE.DeleteOnSubmit(dndd); 

     } 

     try 
     { 
      context.SubmitChanges(); 
     } 

     catch (Exception ex) 
     { 
      Console.WriteLine(ex); 
     }  
    } 

的問題是在該行:

String strDataValueField = dances.SelectedItem.Value; 

的strDataValueField總是正從下拉舞蹈項目ID列表(默認情況下發生)的最低ID。我想要這個保存用戶選擇的舞蹈的ID。

回答

0

我會確保只有在沒有回傳的情況下才會生成dropdownlist項目 - if(!IsPostback)。

另外我會檢查viewstate以確保它已啓用。如果禁用視圖狀態,然後在回發時重新綁定控件,則可能會丟失選定的項目。

我也會嘗試將下拉列表設置爲autopostback並附加選定的已更改索引的事件,以查看是否至少以這種方式發送了更改。

+0

嘿感謝,它確實工作!我沒有與if(!IsPostback)綁定。另外我沒有設置enabledviewstate = true。再次感謝:) – user1318369 2012-04-07 22:44:13

0

無論何時綁定PopulateDanceDropDown()方法中的下拉列表,您都必須清除所有下拉列表項。

dances.Items.Clear(); 

嘗試可能會幫助你..

相關問題