2012-07-09 3 views
0

HashTables이 포함 된 ArrayList이 있는데 일부 항목이 포함 된 ListView이 있습니다.목록 목록과 일치하는 항목 목록보기 C#

내가 필요한 것은 배열 목록을 목록 항목과 일치시키는 것입니다.

목록보기에서 항목이 배열 목록에없는 경우 목록보기에서 항목을 제거해야합니다.

목록보기 또는 배열 목록에 없으면 목록보기에 추가하십시오.

ArrayList online_list = users; 
foreach (Hashtable i in online_list) 
      { 
        ListViewItem item = new ListViewItem(); 
        item.Text = (string)i["u_name"]; 
        item.Name = (string)i["id"]; 
        item.ImageIndex = 0; 
        lstvUsers.Items.Add(item); 
      } 

이 코드는 체크하지 않고 목록보기로 모든 배열 목록 항목을 추가

은 일부 코드입니다!

+2

당신은 1.1에 여전히 또는 왜 당신이 ArrayLists와 해시 테이블을 사용합니까? –

+0

iam 3.5, 나는 PHP 웹 서비스에서 관련 배열과 배열 배열을 반환하도록 데이터를 recive하기 때문에 사용합니다. 더 나은 솔루션 포인트를 알고 있다면 사용할 수 있습니다. 그러나 여전히 대답이 필요합니다. –

답변

0

먼저 clearListView의 모든 항목은 다음 ArrayList 모두를 추가 할 수 있습니다 : 당신은 단호있어 이후 : https://stackoverflow.com/a/10170049/284240

편집 :

lstvUsers.Clear(); 
foreach (Hashtable i in online_list) 
{ 
    ListViewItem item = new ListViewItem(); 
    item.Text = (string)i["u_name"]; 
    item.Name = (string)i["id"]; 
    item.ImageIndex = 0; 
    lstvUsers.Items.Add(item); 
} 

당신은 ListView.Clear 대신 ListView.Items.Clear의 사용해야합니다 ListView에서 ArrayList에없는 항목을 제거하고 ListView에는 없지만 ArrayList에 항목을 추가하기 만하면됩니다. 이 방법은 아무 것도 비교하지 않고 ListView의 각 항목을 ArrayList의 각 항목과 비교해야합니다 (반대의 경우도 마찬가지). 예를 들어

:

var addItems = online_list 
    .Cast<Hashtable>() 
    .Where(ht => !lstvUsers.Items.ContainsKey((string)ht["id"])); 
var removeItems = lstvUsers.Items 
    .Cast<ListViewItem>() 
    .Where(lvi => !online_list.Cast<Hashtable>().Any(ht => (string)ht["id"] ==lvi.Name)); 

foreach (var removeItem in removeItems) 
{ 
    lstvUsers.Items.Remove(removeItem); 
} 
foreach (var addHashTable in addItems) 
{ 
    ListViewItem item = new ListViewItem(); 
    item.Text = (string)addHashTable["u_name"]; 
    item.Name = (string)addHashTable["id"]; 
    lstvUsers.Items.Add(item); 
} 
+0

나는 이미 지금이 작업을 수행하고 있습니다. 하지만 매 3 초마다 내용을 새로 고침하므로 깜박임 @ 목록보기를 만들고 내가 한 일이라면 선택을 제거하십시오! –

+0

대신 ListView.Clear를 사용하여 적절하게 질문을 편집하십시오. –

+0

@SamyMassoud :'lstvUsers.Items '앞에 ['ListView.BeginUpdate'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.beginupdate.aspx)를 사용할 수도 있습니다. 루프 후 Clear();와 ['ListView.EndUpdate'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.endupdate)를 참조하십시오. 그것은 더 빨라질 것입니다. –