2016-06-11 1 views
1

저는 ListView를 사용하여 name (string), age (int)와 같은 관련 속성을 가진 객체 (persons) 목록을 보여줍니다. 그러나이 객체에는 id 속성이있어 서로 구분할 수 있습니다.ListView에 숨겨진 값 (id)을 저장하십시오.

질문은, 무엇입니까 개체를 나타내는 항목을 클릭하면 검색 할 id 값, 저장하는 '올바른'방법은 무엇입니까?

이렇게하려면 숨겨진 열 (열 너비 = 0)을 사용하고 있지만 좋은 방법은 아닌 것 같습니다.

foreach (var person in col.listPersons) 
{ 
    ListViewItem lIt = new ListViewItem(person.id); //Column with width = 0 
    lIt.SubItems.Add(person.name); 
    lIt.SubItems.Add(person.age); 
    lPer.Items.Add(lIt) //Add the item to ListView 
} 
+0

은 "올바른 방법"문자열로 변환 (또는 태그를 사용하여 객체로 박스) 밤은 모든 것을, 날짜는 날짜 머물 수 있도록, int 치의 int 타입을 남아 등 – Plutonix

답변

2

추가 데이터 속성을 추가하는 간단한 방법은 Tag 속성을 사용하는 것입니다. 여러 속성 또는 ID와 같은 간단한 스칼라 값을 사용하여 클래스 객체를 할당 할 수 있습니다. 태그는 매우 다목적이며 많은 컨트롤에서 일반적인 속성입니다.

foreach (var person in col.listPersons) 
{ 
    ListViewItem lIt = new ListViewItem(); 
    lIt.Tag = person.id; 
    lIt.SubItems.Add(person.name); 
    lIt.SubItems.Add(person.age); 
    lPer.Items.Add(lIt); //Add the item to ListView 
} 

당신은 쉽게 예를 들어, 다시 ID 값을 검색 할 수 있습니다 :

ListViewItem lit = sender as ListViewItem(); 
person.id = lit.Tag; 

또 다른 일반적인 방법은 ListViewItem.Name 속성을 사용하는 것입니다. 이름은 ListView에서 Key처럼 처리됩니다. 그런 다음이 키 값을 사용하여 ListView.Items.IndexOfKey() 또는 ListView.Items [ "key"]에 전달하여 ListView에서 특정 항목을 검색 할 수 있습니다. 이름은 문자열이므로 태그만큼 유연하지 않지만 유스 케이스에 더 이상적 일 수 있습니다.

foreach (var person in col.listPersons) 
{ 
    ListViewItem lIt = new ListViewItem(); 
    lIt.Name = person.id; // Treat the Name as a Key 
    lIt.SubItems.Add(person.name); 
    lIt.SubItems.Add(person.age); 
    lPer.Items.Add(lIt); //Add the item to ListView 
} 
+0

그것은 정확히 무엇을의를 DataGridView를를 사용하는 것 나는 필요하다. PD : Buen nick :) –