Archief - VB.Net Combobox waarde uithalen [solved]

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Klopgeest

Legacy Member
Even de situatie schetsen:
Ik heb 3 (Access tabellen) die in een één op veel relatie met elkaar gelinkt zijn
Bouwfirma (PK: firma_id, naam, + resem andere velden)
Vrachtwagen (PK: vrachtwagen_id, FK: firma_id, merk)
Levering (PK: lever_id, FK: vrachtwagen_id)

Aan elke tabel heb ik een soort van doorscrolmethode gemaakt:
Droplr*•*Screenshot on 1.6.2012 at 2.30.55 PM.png

Door de records bladeren gaat zonder problemen. Nu moet er in die combobox de naam van de bouwfirma (waaraan dus een vrachtwagen is gekoppeld) tevoorschijn komen. Zoals het nu is heb ik gewoon al de namen in de combobox gestoken, zonder dat ze gelinkt zijn aan het huidige record. Dus ik moet aan de hand van het firma_id de naam ophalen.

Iemand enig idee?

NeverwinterX

Legacy Member
select naam from Bouwfirma where firma_id = hetidvandefirma

Klopgeest

Legacy Member
Dat is een nieuwe connectie naar de database en mag absoluut niet (helaas).

Moto

Legacy Member
Dus ik moet aan de hand van het firma_id de naam ophalen.
Maakt een lijst van de firma's met zeker 2 properties de interne ID (die FK dus firma_id) en de description.

Dat zet ge als datasource van de combo
Zo'n combobox heeft normaal 2 properties ValueMember en DisplayMember
ValueMember is de Id, DisplayMember de Description die ge displayed dus
stel dat uw firma class properties Id en Description heeft dan doet ge dus

cbo.DataSource = List<class firmal>
cbo.ValueMember = "Id"
cbo.DisplayMember = "Description"

Bij record-change doet ge dan een update van de combo via de ValueMember dus normaal is
dat dan iets van een cbo.SelectedValue = x


Dat is een nieuwe connectie naar de database en mag absoluut niet
Tuurlijk mag dat ABSOLUUT niet, als ge ooit iets deftig wilt maken is kan dat onmogelijk op dergelijke luie manier

Klopgeest

Legacy Member
Maakt een lijst van de firma's met zeker 2 properties de interne ID (die FK dus firma_id) en de description.
Code:
 Public Function Bedrijfsnamen() As ArrayList
  Dim arrBedrijfsnamen As New ArrayList
  Dim i As Integer
  For i = 0 To Aantal - 1
   bmb.Position = i
   VulRecord()
   arrBedrijfsnamen.Add(New bsBouwfirma(bouwfirma))
  Next
  Return arrBedrijfsnamen
 End Function

Dat zet ge als datasource van de combo
Zo'n combobox heeft normaal 2 properties ValueMember en DisplayMember
ValueMember is de Id, DisplayMember de Description die ge displayed dus
stel dat uw firma class properties Id en Description heeft
Code:
cboBouwfirma.DataSource = bouwfirmas.Bedrijfsnamen()
   cboBouwfirma.ValueMember = "firma_id"
   cboBouwfirma.DisplayMember = "naam"

Bij record-change doet ge dan een update van de combo via de ValueMember dus normaal is
dat dan iets van een cbo.SelectedValue = x


Op deze wijze toont hij de eerste bedrijfsnaam die wordt ingeladen in de combobox (dus niet de juiste firma gekoppeld aan die vrachtwagen). Bij het doorscrollen van de records blijft hij dus gewoon op die eerste value staan.

Ik heb wel een functie die bij elk record de juiste firma_id toont (nagekeken met messageboxen en klopte)
Code:
 Public Function MatchIDs(ByVal vrachtwagenFirmaId As Integer) As Integer
  Dim returnwaarde As Integer
  For Each firma As bsBouwfirma In Bedrijfsnamen()
   If vrachtwagenFirmaId = firma.Firma_ID Then
    returnwaarde = bouwfirma.Firma_ID
   End If
  Next
  Return returnwaarde
 End Function

NeverwinterX

Legacy Member
Je hebt alles dus al uit de database gehaald? Zeg dat dan: je originele vraag was hoe je dat uit de database haalt. Het is mij ook een raadsel waarom je maar 1 ding in een combobox wilt steken, zoek eens op waarvoor een combobox dient.

Klopgeest

Legacy Member
Het was om een record te tonen, en ook te kunnen wijzigen.

Maar met een heleboel geprul heb ik het klaargekregen volgens uw voorbeeld! Dank!

cptKangaroo

Legacy Member
Als je BouwFirma object een overriden ToString() heeft, kan je gewoon ComboBox.Items.Add(BouwFirmaObject) doen, en dan wordt de BouwFirma.ToString() als display getoond terwijl ComboBox.SelectedItem een BouwFirma object is (na casten naar BouwFirma).

Iedere keer weer die Bedrijfsnamen array opbouwen is een beetje vreemd, temeer daar er blijkbaar verschillende globale variabelen in die functie gebruikt worden. Je Access tabellen zijn waarschijnlijk omgetoverd tot lijsten van BouwFirma objecten, en je Bedrijfsnamen functie lijkt alle objecten te gebruiken, dus waarom niet rechtstreeks die BouwFirma lijst in je ComboBox steken? Dus in plaats van datasource=Bedrijfsnamen() doe je rechtstreeks datasource=UweVolleList(Of BouwFirma)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan