2014-02-26 4 views
0

나는 2 열로 목록보기를 가지고 있고, 사용자가 입력하는 양식에 단추가 있고 ip : port를 클릭 한 다음 단추를 클릭하면 목록보기에 항목을 추가한다.

내가 원하는 것은 다음과 같습니다 :
사용자가 버튼을 클릭하면 ip가 listview에 있는지 확인하고 만약 그렇다면 해당 ip와 연결된 포트가 있는지 확인하려고합니다. 부 항목에서. 내가 항목을 추가하고 싶지 않다면 동일한 IP를 가진 예제 2 개가 있지만 포트가 다를 수 있습니다.C# 항목이 있지만 하위 항목이 다른 경우 항목을 목록보기에 추가하는 방법은 무엇입니까?

도움을 주시면 감사하겠습니다.

+0

포트가 다른 경우에만 중복 IP를 갖고 싶습니다. IP와 포트가 이미 listview에 있다면, 나는 그들을 추가하고 싶지 않습니다. – user2732954

답변

1

이 시도 :

void Main() 
{ 
    Form form = new Form(); 

    ListView lv = new ListView(); 
    lv.View = View.Details; 
    lv.Columns.Add(new ColumnHeader() { Name = "ip", Text = "IP Address" }); 
    lv.Columns.Add(new ColumnHeader() { Name = "port", Text = "Port" }); 
    lv.Dock = DockStyle.Fill; 

    // Tests. 
    AddItem(lv, "10.0.0.1", String.Empty); 
    AddItem(lv, "10.0.0.2", String.Empty); 
    AddItem(lv, "10.0.0.1", "8080"); 
    AddItem(lv, "10.0.0.1", String.Empty); 
    AddItem(lv, "10.0.0.1", "8080"); 

    form.Controls.Add(lv); 
    form.ShowDialog(); 
} 

private void AddItem(ListView listView, string ip, string port) 
{ 
    var items = listView.Items.Cast<ListViewItem>(); 
    // First subitem starts at index 1. 
    bool exists = items.Where(item => 
     (item.Text == ip && item.SubItems[1].Text == port)).Any(); 
    if (!exists) 
    { 
     var item = new ListViewItem(ip); 
     item.SubItems.Add(new ListViewItem.ListViewSubItem(item, port)); 
     listView.Items.Add(item); 
    } 
    else 
    { 
     Console.WriteLine("Duplicate: {0}:{1}", ip, port); 
    } 
} 

체크는 AddItem() 방법입니다. 요구 사항에 따라 수정하십시오.

+0

매력처럼 작동합니다! 고맙습니다! – user2732954

+0

당신을 환영합니다! –

0

Dictionary<string, List<string>>의 모델을 사용하여 컨트롤과 데이터를 분리하여 목록 뷰를 채 웁니다. 쉽게 확인하고 수정할 수 있습니다.