[VB.net] Datarow doorsturen naar Custom User Control

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • skate master
  • Registratie: September 2004
  • Laatst online: 20:54

skate master

Autodesk Educator Expert

Topicstarter
Mensen,

ik ben bezig met een plugin in AutoCAD, een onderdeel van deze plugin is de mogelijkheid om een selectie van objecten te maken welke weergegeven wordt middels een User Control in een Flowlayoutpanel

De selectie welke gemaakt wordt door de gebruiker wordt opgeslagen in een DataTable.
Vanuit deze datatable wordt de Flowlayout gevuld met User Controls. In de User Controls worden een aantal gegevens uit de datatable gepresenteerd in een Label en textbox.
De gehele datarow van het bewuste object wil ik ook graag in de User Control opslaan om zo nadat de gebruiker de wijzigingen heeft toegepast (hernoemen / verwijderen / volgorde) alle resterende objecten weer in een lege Datatable te kunnen opslaan voor verder gebruik.

Het vullen van de Flowlayout en het weergeven in mijn control gaat goed, echter wordt de Datarow niet goed verwerkt. Alle items in de Flowlayout bevatten de datarow van het laatst toegevoegde element.
Ergens doe ik iets niet goed, wie kan mij vertellen waar mijn fout zit?

Hieronder de relevante code uit mijn User Control
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
Public Class UC_ListItem
    
    Shared dtItemRow As System.Data.DataRow
    
    Public Property ItemRow As System.Data.DataRow
        Get
            Return dtItemRow
        End Get
        Set(value As System.Data.DataRow)
            dtItemRow = value
        End Set
    End Property
End Class


Via onderstaande code wordt de flow gevuld, en later weer uitgelezen
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub laadLijst()
    Dim custCntrl As UC_ListItem 
    For Each dtFilterRow As System.Data.DataRow In dtSelectedObjects.Rows
        custCntrl = New UC_ListItem()
        custCntrl.ItemRow = dtFilterRow
        
        flowSelection.Controls.Add(custCntrl)
    Next
End Sub

Sub verwerkLijst()
    dtListRows = New DataTable
    clsObjectenBeheer.initDtObjecten(dtListRows) 'aanmaken van de juiste kolom settings voor de tabel
    With flowSelection
        For Each myCntrl As UC_ListItem In .Controls
            dtListRows.ImportRow(myCntrl.ItemRow)
        Next
    End With

End Sub


Kortom, hoe zorg ik ervoor dat mijn datarow in mijn custom user control wordt opgeslagen?

Beste antwoord (via skate master op 08-07-2019 11:23)


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 27-09 13:03

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Alle reacties


Acties:
  • 0 Henk 'm!

  • Jurgle
  • Registratie: Februari 2003
  • Laatst online: 24-06 00:27

Jurgle

100% Compatible

Mijn vaardigheden in de taal en applicatie die je gebruikt zijn niet op niveau, maar dit klinkt als een probleem dat ik vaker gezien heb. Je slaat mogelijk een referentie naar een datarow op bij elk item in je flowlayout en dat het daardoor lijkt alsof de laatste aan alle items wordt toegevoegd.

Met andere woorden:
Je loopt over de items in je flowlayout en je koppelt elke keer een datarow-referentie aan dat item. De iteratie daarna in die loop hergebruikt hetzelfde datarow object met data van de volgende datarow, maar het is hetzelfde object. Daardoor wijst elk item dus naar hetzelfde object, maar dat object bevat de data van de laatste iteratie.

Als dat het probleem is, dan kan een oplossing zijn om voor elk item een deep-copy te maken van de betreffende datarow en die copy op te slaat bij de items in je flowlayout.

My opinions may have changed but not the fact that I am right ― Ashleigh Brilliant


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 27-09 13:03

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • skate master
  • Registratie: September 2004
  • Laatst online: 20:54

skate master

Autodesk Educator Expert

Topicstarter
Het is inmiddels opgelost, het Shared waar @farlane op wijst was inderdaad de boosdoener.
Ik heb Shared gewijzigd in Public en nu werkt het zoals verwacht.