2012-11-29 3 views
2

누구나 이것이 ListItems의 값을 ID로 설정하지 않는 이유를 알 수 있습니까? 값 및 텍스트는 모두linq 쿼리로 ListBox 채우기 - 값이 설정되지 않음

lstSelected.DataSource = entities.User 
    .Where(x => SelectedItems.Contains(x.ID)) 
    .Select(x => new ListItem { Text = x.DISPLAY_NAME, Value = x.ID }) 
    .ToList<ListItem>(); 

    lstSelected.DataBind(); 
+0

당신은 빈 목록을 받고 있는가? 또는 공백이나 쓰레기가있는 채워진 목록? –

+0

담근. 신경 쓰지 마. 그것은 바인딩, 아니 linq. DataValueField 및 DataTextField를 목록 상자에 설정해야한다는 것을 알지 못했습니다. listitem을 사용하면 거의 자동으로 – user1566694

+0

Ok가됩니다. 행운을 빌어 요. –

답변

4

(당신이 asp.net을 사용하는 경우 또는 DataTextFieldDataValueField) DisplayMemberValueMember 속성

lstSelected.DisplayMember = "DISPLAY_NAME"; 
lstSelected.ValueMember = "ID"; 
lstSelected.DataSource = entities.User 
    .Where(x => SelectedItems.Contains(x.ID)) 
    .ToList(); 
lstSelected.DataBind(); 
+1

그게 더 잘 작동합니다. 감사 – user1566694

0

당신은 (당신은 모두를 사용하고이 옵션을 설정하십시오 DISPLAY_NAME로 나와) 잘못된 방법 :

을 설정 DataSource, DataTextFieldDataValueField :

lstSelected.DataSource = entities.User 
     .Where(x => SelectedItems.Contains(x.ID)) 
     .ToList<ListItem>(); 

lstSelected.DataTextField = "DISPLAY_NAME"; 
lstSelected.DataValueField = "ID"; 

lstSelected.DataBind(); 

또는 ListItem의 인스턴스를하고 ListBox에 추가 :

List<ListItem> mySelectedItems = entities.User 
     .Where(x => SelectedItems.Contains(x.ID)) 
     .Select(x => new ListItem { Text = x.DISPLAY_NAME, Value = x.ID }) 
     .ToList<ListItem>(); 

foreach(ListItem item in mySelectedItems) 
{ 
    lstSelected.Items.Add(item); 
} 
lstSelected.DataBind(); 
관련 문제