Hoe data in een cel steken van een TableView

Zet op een Form bv Form1 een tabel met de eigenschap TableView, bv tbvwFill.
Het gemakkelijkst is waarschijnlijk om de tabel te initialiseren door code die je oproept bij het openen van de Form waar ze in staat:

PUBLIC SUB Form_Open()

  initTableView()

END

Je moet dan een procedure daarvoor maken:

PUBLIC SUB initTableView()

Daarin moet je zeker bepalen wat de grootte van de tabel is, m.a.w. hoeveel cellen horizontaal en hoeveel vertikaal. Daarvoor “zet” je de eigenschap van de kolom en rij-teller door er een waarde of de waarde van een bestaande variabele aan toe te kennen:

  tbvwFill.Columns.Count = 3
  tbvwFill.Rows.Count = iDefinedRows

Je kan het aantal natuurlijk laten bepalen door een globale variabele die je elders reeds gevuld had:

  tbvwFill.Rows.Count = FMain.$hMonth.GrdTotRows()
  • FMain: het hoofdscherm van waaruit het huidig scherm (Form1) wordt opgeroepen
  • $hMonth is een object dat een maand voorstelt, daar een aantal eigenschappen over heeft, en gedefinieerd werd in FMain.
  • GrTotRows is een eigenschap van object $hMonth, de waarde is al toegekend in FMain; of hier is het eigenlijk een functie van het object $hMonth die deze waarde berekent op basis van andere eigenschappen en teruggeeft als waarde.

Op deze manier kan het aantal rijen van tabellen in verschillende forms gestuurd worden uit 1 variabele.

Een waarde toekennen aan de twee cellen of velden van de bovenste rij in de tabel:

  tbvwFill[0, 0].Text = "ID"
  tbvwFill[0, 1].Text = "Naam"
  iRowStartEmployees = 1

Procedure natuurlijk altijd afsluiten met

END

Het vullen van de tabel kan o.a. met een FOR EACH loop, bv met waarden uit een resultset - hier $hResEmployees - die op voorhand gevuld werd met waarden uit een databank.

  FOR EACH $hResEmployees
    tbvwFill[$hResEmployees.Index + iRowStartEmployees, 0].Text = $hResEmployees!emp_id
    tbvwFill[$hResEmployees.Index + iRowStartEmployees, 1].Text = $hResEmployees!emp_name
  NEXT

De eerste twee kolommen (kolom 0 en kolom 1) worden gevuld met een de velden id en name uit de database.
De eerste rij wordt hier niet gebruikt (rij 0) omdat daar de titel in staat.

Dan moet ervoor gezorgd worden dat als je op de tabel klikt, je de waarde van de cel kan wijzigen:

PUBLIC SUB tbvwFill_Click()

  tbvwFill.Edit()

END

En tenslotte moet je ervoor zorgen dat die ingevulde waarde ook behouden blijft in de cel:
Daarvoor moet je de methode _Save van de tabel zelf aanvullen met code:

PUBLIC SUB tbvwFill_Save(x AS Integer, y AS Integer, sText AS String)

  tbvwFill[x, y].Text = sText

END

Je kan hier natuurlijk binnen deze code controles op uitvoeren enz.

- NB: - -

Ik vond ook Example “Database” in Gambas2:

Plak eerst een DataSource uit toolbox Data op je Form. Dan TableView daarin zetten.
Je moet een resultset hebben van een verbinding met een databank.

Je moet de methode _Data van de tableview invullen met code:

tbvwData_Data(iRow AS Integer, iColumn AS Integer)

  $hResData.MoveTo(iRow)
  tbvwData.Data.Text = $hResData[tbvwData.Columns[Column].Text])

Misschien moet je een paar variabelen klaarmaken:

DIM hTable AS Table
DIM hField AS ResultField ' ResultField (gb.db) staat voor veld van een Result object
DIM sField AS String ' om de naam in op te slaan
DIM

Comments are closed.