2012-12-06 2 views
2

asp.net 페이지 수명주기에 대한 기본적인 정보가 누락되었습니다. 나는 CheckBoxListCheckboxList에 프로그래밍 방식으로 선택 옵션을 채우기

에 바인딩

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

그 다음에 많은 ListItems 잔뜩 추가 해요

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

(같은 일이 목록 상자에 발생하지만)

은 내가 CheckBoxList이

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

그리고 때마다 목록에있는 항목 (목록 상자 또는 선택 해제)되지 않은에서 표시 ListItems를 태그의 컨트롤에 직접 추가하면 선택 항목이나 선택 취소 항목으로 표시됩니다.

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

내가 선택한 코드에서 잘못된 것은 무엇입니까? Checked가 true로 설정된 바인딩 CheckBoxes를 시도했으며 동일한 문제가 발생합니다.

편집 : 확인을 올바르게 선택하지 않았습니다. 지금

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

을 사용하고 있습니다 그리고 당신은 ListItem 변화에게 그것의 Selected 속성을 만들고 컬렉션에 추가 할 수

답변

3

을 확인으로 그들은 여전히로드 아닙니다.

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

을 ListItem은 생성자에 설정되어있는 검사 재산권, 단지 선정,없는 : 나는 승리 양식이 같은 일을 어떻게했는지 사용량이 약간 다를 수 있습니다, 그래서 이것은 기본적으로. Checked = true를 사용하여 ListItems 대신 CheckBoxes를 만들려고했지만 어느 쪽도 작동하지 않았습니다 –

+0

선택되지 않음, 내 코드가 업데이트되었습니다. – Adil

+0

Selected가 이미 생성자의 세 번째 매개 변수에 설정되어 있습니다. 이것을 시도해보고 Page_Load에서 코드를 실행하면 선택 항목으로 표시되는지 확인할 수 있습니까? 어쩌면 내 설치에 이상한 점이 있을지도 몰라. –

1

ListItem.EnabledListItem.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를 사용하여 과거에 이런 짓을했는지 사전을-결정하고 그들을 통해 반복.

아이디어를 제공해야하는 테스트되지 않은 코드가 있습니다.

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

좋습니다. Selected 속성은 DataBind 때 덤프 된 것으로 보입니다. 방금 바인딩 한 항목을 순환하면 선택한 속성이 설정됩니다. 추가 브라 우니 포인트는 누구나 이유를 설명 할 수 있습니까? –

+0

@Mikey 렌더링 된 HTML이 "Selected"로 설정하는 Checked 속성 만있는 입력 목록이기 때문입니다. 다른 말로하면, 컨트롤은 데이터에 바인딩해야하고, 자체적으로 빌드 한 다음 확인란 목록으로 표시됩니다. 이 문제를 해결하려면 대신 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()); 
} 
관련 문제