2012-12-06 88 views
2

我感覺我錯過了一些關於asp.net頁面生命週期的真正基礎。以編程方式使用選中的選項填充CheckBoxList

我有一個CheckBoxList的(雖然同樣的事情用一個ListBox發生)

<asp:CheckBoxList runat="server" ID="cblCountriesAccessible" DataTextField="Text" /> 

我加入了一堆listItems中的它

 var lbData = new List<ListItem>(); 
     lbData.Add(new ListItem("x", "", true)); 
     lbData.Add(new ListItem("y", "", false)); 

然後將它們綁定到CheckBoxList的

cblCountriesAccessible.DataSource = lbData; 
    cblCountriesAccessible.DataBind(); 

而且每次列表中的項目顯示在未選中狀態(或在列表框中未選中) 如果我將ListItems直接添加到標記中的控件中,它們顯示爲已選或未選中狀態。

<asp:ListItem Text="x" Value="" Selected="True" /> 

我在做錯選擇的代碼沒有通過?我已經嘗試將Checked設置爲true來綁定CheckBox,並且發生同樣的事情。

編輯:好的,我沒有設置正確選擇。現在,我使用

 var lbData = new List<ListItem>(); 
     var l1 = new ListItem("yy", "", true) {Selected = true}; 
     var l2 = new ListItem("xx", "", true) {Selected = false}; 

     lbData.Add(l1); 
     lbData.Add(l2); 

而且他們還沒有加載作爲託運

回答

3

您可以創建ListItem改變其Selected財產,並添加收藏。

ListItem li1 = new ListItem("x", "", true); 
ListItem li2 = new ListItem("x", "", true); 
li1.Selected = true; 
li2.Selected = true; 
cblCountriesAccessible.Items.Add(li1); 
cblCountriesAccessible.Items.Add(li2); 
+0

列表項沒有經過物業,只是選擇的,這是在構造函數中設置。我已經嘗試使用Checked而不是ListItems Checked = true,但是這並不起作用,或者 –

+0

它的Selected未選中,更新我的代碼請看看。 – Adil

+0

已選中已在第三個參數中設置的構造函數中。你可以試試看看,如果你在Page_Load中運行代碼,它們是否顯示爲選中狀態?也許這裏的設置有些奇怪。 –

1

ListItem.Enabled是不一樣的ListItem.Selected。通過此MSDN頁面(http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listitem.enabled.aspx

啓用只是確定是否可以選擇它。使用此重載創建項目時,它不會選擇它。

本頁顯示(http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkboxlist.aspx):「要確定CheckBoxList控件中的所選項目,請遍歷Items集合並測試集合中每個項目的Selected屬性。

我已經在過去使用LINQ做了這件事,讓我的項目清單預先確定,然後遍歷它們。

這裏有一些未經測試的代碼應該給你一個想法。這基本上是我如何做與Win形式同樣的事情,讓您的使用情況可能略有不同:

For each item in Items 
    CheckedListBox.Items.Add(item.Name,Item.value,True) 
Next 

dim selectedItems as list(of Item) = items.where(function (x) x.selected = True) 

for each item in CheckedListBox.items 
    item.Selected = selectedItems.contains(item.Value) 
next 
+1

好的,那是有效的。當你DataBind時,Selected屬性似乎被拋棄。如果您在您剛剛綁定的項目中循環,則設置它的選定屬性。 額外布朗尼點任何人都可以解釋爲什麼? –

+0

@Mikey,因爲呈現的HTML是一個輸入列表,只有Checked屬性才能將其設置爲「Selected」。換句話說,控件必須綁定到數據,構建自身,然後將其作爲複選框列表公開。爲了解決這個問題,請使用Repeater。 – Fandango68

0
public string GetListItems() 
{ 
    System.Collections.Generic.List<string> items = new System.Collections.Generic.List<string>(); 

    foreach (ListItem item in lstfunction.Items) 
    { 
     if (item.Selected) 
     { 
      items.Add(item.Value); 
     } 
    } 

    return String.Join(", ", items.ToArray()); 
} 
相關問題