2012-07-11 3 views
2

나는 아래의 코드에 대한 잠시 동안 궁금되었습니다 더 읽기 때문에인덱스가 아닌 이름으로 listview 하위 항목을 참조하는 방법은 무엇입니까?

ListView1.View = View.Details 
ListView1.Columns.Add("c1") 
ListView1.Columns.Add("c2") 
Dim Item As New ListViewItem  
Item.Text = "1" 
Item.SubItems.Add("2") 
ListView1.Items.Add(Item) 

'MsgBox(ListView1.Items(0).SubItems("c1").Text) 'this is wrong 
MsgBox(ListView1.Items(0).SubItems(0).Text) 'this is right 

내가 그 이름으로 열을 참조 할 수있는 방법을 원하고 기회를 줄여 실수하는 것. 그러나 프로그램은 빌드되지 않습니다. 이견있는 사람?

+0

가 왜 귀하의 질문에 C#을 태그입니까? 표시 한 코드 스 니펫이이 프로그래밍 언어와 어떤 관련이 있습니까? –

+0

vb.net 카테고리를 찾지 못해 죄송합니다. –

답변

2

당신은 ListViewSubItem에 대한 이름을 지정하고 그 이름을 서브 아이템 참조 할 수 있습니다 :이 방법으로 하위 항목을 추가하는 경우

Dim subItem As New ListViewItem.ListViewSubItem 
subItem.Name = "c1" 
subItem.Text = "SubItem" 
Item.SubItems.Add(subItem) 

, MsgBox(ListView1.Items(0).SubItems("c1").Text)는 것이다 작업.

업데이트 :

불행하게도,이 첫 번째 하위 항목에 대해 작동하지 않습니다. 이 문제를 해결하려면, 당신은 ListViewItem 전에 (기본 포함) 모든 하위 항목을 작성해야 할 수도 있습니다

Dim subItems As ListViewItem.ListViewSubItem() = New ListViewItem.ListViewSubItem(2 - 1) {} 
subItems(0) = New ListViewItem.ListViewSubItem() 
subItems(0).Name = ListView1.Columns(0).Text 
subItems(0).Text = "Default SubItem" 
subItems(1) = New ListViewItem.ListViewSubItem() 
subItems(1).Name = ListView1.Columns(1).Text 
subItems(1).Text = "SubItem 1" 
Dim Item As New ListViewItem(subItems, 0) 
ListView1.Items.Add(Item) 
2

당신은 LINQ의 약간을 사용할 수

Dim c1Items = From subItem In ListView1.Items(0).SubItems.Cast(Of ListViewItem.ListViewSubItem)() 
       Where subItem.Name = "c1" 
MsgBox(c1Items.First.Text) 

Enumerable.Where는 조건 자에 따라 값의 시퀀스를 필터링합니다. First은 첫 번째 요소를 취합니다. 따라서 첫 번째 하위 항목 TextName = "c1"입니다.

편집 : Winform 컨트롤에 익숙하지 않습니다. SubItem 이름이 설정되어 있지 않으면이 LINQ 쿼리를 사용하여 주어진 Text으로 ColumnHeader의 인덱스를 찾을 수 있습니다. 그럼 당신은 올바른 하위 항목을 얻을하는 데 사용할 수 있습니다 :

Dim c1ICol = (From col In ListView1.Columns.Cast(Of ColumnHeader)() 
       Where col.Text = "c1").First 
MsgBox(ListView1.Items(0).SubItems(c1ICol.Index).Text) 
+0

감사합니다. 나는 그것을 시도 할 것이다. –

+0

@ user1518100 : 내 대답을 수정했습니다. Winform 컨트롤에 익숙하지 않아 간단한 솔루션을 간과했거나 항상 그렇지는 않습니다. 그러나 스스로 시험해보십시오. –

관련 문제