Just nu i M3-nätverket
Gå till innehåll
tonlof

Radera innehåll från lista fungerar inte

Rekommendera Poster

Hej, jag får inte remove att fungera.. Jag kan radera om jag vet index men jag vill kunna radera hela posten baserat på t.ex id nummer eller serial.

Tänker jag fel med  details.Remove(New eventAction() With {.id = 1})

Får inga felmeddelanden.

details.contains(New evenntAction() With {.id = 1}) ger false så det fungerar inte heller att se om id 1 finns.

 


Public Class eventAction

        Public Property id() As Integer
            Get
                Return m_id
            End Get
            Set
                m_id = Value
            End Set
        End Property
        Private m_id As Integer

        Public Property serial() As Integer
            Get
                Return m_serial
            End Get
            Set
                m_serial = Value
            End Set
        End Property
        Private m_serial As Integer

        Public Property command() As String
            Get
                Return m_command
            End Get
            Set
                m_command = Value
            End Set
        End Property
        Private m_command As String

        Public Property par1() As String
            Get
                Return m_par1
            End Get
            Set
                m_par1 = Value
            End Set
        End Property
        Private m_par1 As String

        Public Property par2() As String
            Get
                Return m_par2
            End Get
            Set
                m_par2 = Value
            End Set
        End Property
        Private m_par2 As String

    End Class
	

       Dim details As New List(Of eventAction)()

        details.Add(New eventAction() With {
         .id = 1,
         .command = "TEST1",
        .serial = 123456789,
        .par1 = "par1",
        .par2 = "par2"
        })
        details.Add(New eventAction() With {
        .id = 2,
        .command = "TEST2",
        .serial = 987654321,
        .par1 = "par1",
        .par2 = "par2"
        })

        details.Remove(New eventAction() With {.id = 1})

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Lägg till denna metod på ditt objekt så kommer det fungera.

Public Overrides Function Equals(obj As Object) As Boolean
        Dim evtAction As eventAction
        evtAction = CType(obj, eventAction)
        Return Me.id = evtAction.id
End Function

Det list.Remove gör är att den kör Equals metoden för att kontrollera om det är samma objekt. Och därför måste du implementera regler för jämförelse av ditt objekt i den metoden.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Tackar, kommer från gamla vb6. Har kodat i vb.net ett tag men har extremt mycket kvar att lära så det kanske inte är dumt att börja om från början med c# heller eftersom dom flesta exemplen är med C#

Din override funktion med id fungerade perfekt men har dock inte löst det ännu med hur jag kan ha samma funktion för .serial och samtidigt behålla .id för. Behöver även kunna sortera efter t.ex .id eller .serial. Ska titta igenom länken på c# exemplen.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Du vill nog kolla på LINQ, det kommer göra att du kan söka upp objekt och sortera osv på vissa egenskaper.

 

Till exempel

Dim myEventAction = From evtAction in details
                    Where evtAction.Serial = 123456789

Eller följande för sortering

Dim ordered = From evtAction In Details Order By evtAction.Serial Descending

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Postad (redigerade)

Nu har jag det mesta löst men behöver kunna flytta en post upp eller ner i listan. Någon form av index swap.

T.ex om index 2 ska flyttas ett steg ner ska index 3 byta plats med 2 osv. Antar att det går att göra detta på ett relativt enkelt sätt i stället för massa kod med loopar?

 

Uppdatering.

Löste det så här. I detta fall flyttas elementet upp ett steg från index. Vid element ner gör jag åt andra hållet.

Ser ut att fungera bra, koden kan säkert förenklas och göras bättre.

     Dim selected = details.ElementAt(index)
        details.RemoveAt(index)
        details.Insert(index-1, New eventAction() With {
        .id = selected.id,
        .command = selected.command,
        .serial= selected.serial,
        .par1 = selected.par1,
        .par2 = selected.par2
        })

Redigerad av tonlof

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×