TableView edit: sommige velden wijzigen, andere cel enkel leesbaar

De volgende stap bij het maken van een tabel met gegevens (TableView) is bepalen welke cel wel of niet mag gewijzigd worden. In dit artikel Hoe data in een cel steken van een TableView werd de tabel gecreëerd, en werd bij een klik de cel wijzigbaar met “.Edit”.

Vanaf je op een cel klikt, is die op het scherm wijzigbaar. De gegevens echt bewaren moet je verder zelf doen, maar misschien wil je al beperken welke cellen gewijzigd kunnen worden. Voorbeeld is een tabel die een record uit de databank weergeeft:

Kolom recordnummer, kolom veldnaam, kolom waarde in het veld. Die laatse willen we wijzigen.
Ik verkies een extra kolom voor de nieuwe waarde, waarbij de gebruiker nog kan zien wat er voordien stond.
Kolomtitels: “fieldname”, “current value”, “new value”
Kolom index 0, 1, 2; kolom 2 moet wijzigbaar zijn. (definieer bovenaan een constante voor deze kolom)

Public Const iColNewVal As Integer = 2

De rijen zijn de velden: rij 1 is id, tweede, derde enz zijn de andere velden van je record.
Je wil meestal niet dat het veld van de id kan gewijzigd worden.
Achteraan zit misschien nog een veld met de datum van aanmaak van het record, die moet ook hetzelfde blijven.

We maken een array om alle kolommen die wijzigbaar zijn in bij te houden:
Private arrEditMask As New Integer[]
Als Array.Find (van een rijwaarde) als resultaat -1 geeft komt ze niet voor.

Zet elke kolom erin die je nodig hebt:
arrEditMask.Add(i)

We reageren in de tabel op een klik als het een “wijzigbaar” veld is:

Public Sub TableView1_Click()
  
  Debug "Is current row ? = " & TableView1.Row
  Debug " is current column ? = " & TableView1.Column
  
  If TableView1.Column = iColNewVal
    If arrEditMask.Find(TableView1.Row) > -1
      TableView1.Edit()
    Endif
  Endif

End

En om de waarde te bewaren in de tabel (zichtbaar te maken na verlaten van het veld) moet je:

Public Sub TableView1_Save(x As Integer, y As Integer, sText As String)

      TableView1[x, y].Text = sText

End

Om de waarde te bewaren in het record in de databank moet je zelf verder uitwerken.

This entry was posted in Gambas2, Gambas3. Bookmark the permalink.