Hur får man fram Key för en markerad rad i en ListView? Jag har löst det (tillfälligt?) genom att när jag lägger till en rad så sätter jag dens Tag till samma som Key och kan på så sätt få reda på vad den har den vägen. Jag brukar använda Tag. Ett annat sätt är att ha en dold kolumn. Tror inte det finns någon "snyggare" lösning än Tag. Konstigt att dom inte har lagt med en sån enkel sak som Key. Men men, jag använder inte Tag annars så den här lösningen fungerar bra för mig. Hmmm. Nu vet jag inte om jag misstolkar dig. Men det är väl väldigt enkelt: Hmm ska testa det där när jag kommer hem. Men om Key finns där, borde det inte finnas med i ListView1.SelectedItem.Item.Key i så fall? Jag kan faktiskt inte hitta var Listitem finns. Sen så har ListView bara SelectedItems, men det funkar kanske lika bra? Klassen heter ListViewItem (om vi talar om en ListView) och den har ingen property som heter Key varken i ramverk 1.1 eller 2.0. Det blir nog som jag har gjort tidigare, att använda Tag. Men att låta en klass ärva från ListViewItem låter intressant, fast jag är inte insatt i hur man ska göra då. Kan man få ett kodexempel? Here we go : Jag upptäckte idag att ComboBoxen i VB.NET inte har någon ItemData, så då tänkte jag att det bara var att göra som med ListView:n, att helt enkelt lägga till den. Men ganska snabbt upptäckte jag att det inte finns någon ComboBoxItem att ärva.Key för markerad rad i en ListView?
ThomasSv: Key för markerad rad i en ListView?
Finns det nått bättre sätt?
ThomasSv:Key för markerad rad i en ListView?
/JohanSv: Key för markerad rad i en ListView?
ThomasSv: Key för markerad rad i en ListView?
Dim Item as Listitem
Set Item = ListView1.SelectedItem
If Item Is Nothing Then
'No item selected
Else
Msgbox Item.Key
End If
Sv:Key för markerad rad i en ListView?
ThomasSv:Key för markerad rad i en ListView?
ThomasSv: Key för markerad rad i en ListView?
Om det räcker med att spara en nyckel så kan du lägga denna direkt i Tag-propertyn som du själv insett, men du kan lika gärna spara ett helt objekt där om du vill. Om du till exempel fyllt på listan från ett dataset så kan du ju spara en referens till varje DataRow direkt i Tag-propertyn.
Exempel :
<code>
Dim row as DataRow=DirectCast(listView1.SelectedItems(0).Tag, DataRow)
Dim customer as Customer=DirectCast(listView1.SelectedItems(0).Tag, Customer)
Dim customerID as Integer=DirectCast(listView1.SelectedItems(0).Tag, Integer)
</code>
Ett annat sätt skulle vara att skapa en egen klass som ärver från ListViewItem och lägga till extra properties till denna.Sv:Key för markerad rad i en ListView?
ThomasSv: Key för markerad rad i en ListView?
Public Class MyListViewItem
Inherits ListViewItem
Private mKey As String="" ' Lokal variabel för vår egna property
Public Property Key As String ' Vår egendefinierade Key-property
Get
Return mKey
End Get
Set
mKey=Value
End Set
End Property
End Class
och sedan hur man använder klassen :
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Lägg till en ListViewItem till listan
Dim item As New MyListViewItem
item.Key = "Per" ' Vår egna property som finns i MyListViewitem
item.Text = "Per Hultqvist" ' ListViewItems property som finns i basklassen
ListView1.Items.Add(item)
' Simulera att användaren väljer en ListViewItem
ListView1.Items(0).Selected = True
' Hämta vald ListViewItem
' Måste typkonverteras för att kunna använda Key-propertyn.
item = DirectCast(ListView1.SelectedItems(0), MyListViewItem)
MessageBox.Show(item.Key)
End Sub
End Class
Sv:Key för markerad rad i en ListView?
Går det inte att göra som jag har tänkt?
Thomas