2012-02-14 5 views
4

에 값을 추가하기 전에 목록 상자에 값이 이미 있는지 확인하는 방법 중복을 피할 수 있도록 값이 목록 상자에 이미 있는지 확인할 수 있습니까?asp.net

이미 서버 측 목록 상자에 값을 추가했습니다. 목록에 추가하면 더 많은 중복이 생성됩니다.

중복을 피하려면 어떻게해야합니까?

lst_Viewers.Items.Add(reader["Name"].ToString()); 
+0

어쩌면 추가하기 전에 목록 상자를 지우시겠습니까? 그렇다면 복제 된 아이템이나 구식 아이템을 결코 얻지 못할 것입니다. – abatishchev

+0

@abatishchev 이것은 Murthy가 원하는 것이 아닙니다. 그는 중복 값을 확인하기 전에 목록 상자에 항목을 추가하려고합니다. – Sukanya

답변

1
if(!lst_Viewers.Items.Any(item => item.Value.ToString().Equals(reader["Name"].ToString()) 
    lst_Viewers.Items.Add(reader["Name"].ToString()); 
7
ListItem item = new ListItem(reader["Name"].ToString()); 
if (! lst_Viewers.Items.Contains(item)){ 
    lst_Viewers.Items.Add(item); 
} 

또는

var name = reader["Name"].ToString(); 
ListItem item = lst_Viewers.Items.FindByText(name); 
if (item == null){ 
    lst_Viewers.Items.Add(new ListItem(name)); 
} 
1

또 다른 방법은 만 고유 한 값을 얻을 수 .Distinct()를 사용하여, 단지 루프 후 항목을 추가 List<string>에 모든 값을 삽입 할 수 있습니다 :

List<string> names = new List<string>(); 
while (reader.Read()) 
    names.Add(reader["Name"].ToString()) 
names.Distinct().ToList().ForEach(name => lst_Viewers.Items.Add(name)); 

이 방법을 사용하면 모든 반복에서 전체 DropDown을 검색 할 필요가 없습니다. 제 생각에는 좀 더 우아하고 효율적입니다.