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() DEBUG TableView1.Column DEBUG TableView1.Row tbvwFill.Edit() END
De DEBUG lijnen tonen de rij en de kolom-waard; de cel linksboven is (0,0); de headers reageert niet op deze klik om coördinaten.
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