Hej! Använd nycklar. Hej Andreas! Du tänker fel. Använd inte index. Använd nyckel(key).Hur komma åt index på nya items i en sorterad listview?
Jag har ett jätteproblem som jag inte lyckats komma runt :(
Jag har en ListView i Report-läge som jag först fyller och sedan sorterar. Om jag efter sorteringen lägger till "items" så infogas dessa på rätt plats enligt sorteringsordningen men hur kommer jag åt vilket index som mitt nya item har och vad får redan befintliga items för index??
Tack på förhand
//KVSv: Hur komma åt index på nya items i en sorterad listview?
T.ex. Lägg till listitems med en nyckel som består av ett prefix och primärnyckeln för tabellen då du läser in till posterna till listview'n.Sv: Hur komma åt index på nya items i en sorterad listview?
Jag uttryckte mig kanske lite oklart men sorteringen som jag gör utförst med hjälp av ListView-kontrollens inbygda funktioner "Sorted" och "SortOrder", dvs jag hämtar data från databasen endast en gång.
Det jag vill göra är att byta bakgrundsfärg på rader i min ListView beroende på vad som står på raden. Tex visar jag datum i listan och vill färga passerade datum rött, dagensdatum svart, kommande datum grönt. För att kunna ändra färg på raden så måste jag först lägga till ett "Item", spara undan dess position i listan (lagras i Key) och skicka den till följande funktion:
<code>Private Sub ChangeColor(Key As String, color As Long)
On Error GoTo ErrorHandler
Dim iRow As Integer
iRow = CInt(Mid(Key, 2))
lstLogg.ListItems(iRow).ForeColor = color
lstLogg.ListItems(iRow).ListSubItems(1).ForeColor = color
lstLogg.ListItems(iRow).ListSubItems(2).ForeColor = color
lstLogg.ListItems(iRow).ListSubItems(3).ForeColor = color
lstLogg.ListItems(iRow).ListSubItems(4).ForeColor = color
Exit Sub
ErrorHandler:
MsgBox "Ett fel uppstod när listan skulle färgkodas."
End Sub</code>
Men hur kommer man åt positionen i listan när jag själv inte kan speca VAR mitt nya item skall hamna.
//KVSv: Hur komma åt index på nya items i en sorterad listview?
<code>
Private Sub ChangeColor(Key As String, color As Long)
Dim Item As ListItem
Dim SubItem As ListSubItem
On Error GoTo ErrorHandler
Set Item = lstLogg.ListItems(Key)
Item.ForeColor = color
For Each SubItem In Item.ListSubItems
SubItem.ForeColor = color
Next
Exit Sub
ErrorHandler:
MsgBox "Ett fel uppstod när listan skulle färgkodas."
End Sub
</code>
Det är ju mer effektivt att färgkoda sammtidigt som du lägger till ListItem'et.
<code>
Dim Item As ListItem
Dim rsTemp As ADODB.Recordset
Do Until rsTemp.EOF
Set Item = lstLogg.ListItems.Add(,"#" & rsTemp("Id"), "" & rsTemp("Text"))
Item.SubItems(1) = "" & rsTemp("Text1")
Item.SubItems(2) = "" & rsTemp("Text1")
Item.SubItems(3) = "" & rsTemp("Text1")
Item.SubItems(4) = "" & rsTemp("Text1")
Item.ForeColor = color
For Each SubItem In Item.ListSubItems
SubItem.ForeColor = color
Next
rsTemp.MoveNext
Loop
</code>