Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VB.NET]SelectedValue instellen voor form.show

Pagina: 1
Acties:

  • Arie-Kanarie
  • Registratie: Juli 2004
  • Laatst online: 21-06 13:40

Arie-Kanarie

Een keer wat anders

Topicstarter
Ik heb hier een formulier met daarop enkele comboboxen. Deze comboboxen worden in de sub New() (na InitializeComponent) van het formulier gekoppeld aan een datatable (welke in dataset zitten). Displaymember en Valuemember worden goed ingesteld (omschrijving en merknr)
Nu wil ik de gegevens op het formulier invullen voor het getoond wordt.
Dus ik heb een hoofdformulier en daarop zit een knopje wijzig als men op de button klikt wordt het eerder genoemde formulier getoond met de gegevens ingevuld.
In het click event van de button doe ik (oa.) dit
Visual Basic .NET:
1
2
3
Dim frm as new DetailForm()
frm.cmbMerk.SelectedValue = Artikel.MerkNr
frm.ShowDialog

Dit werkt niet. Als je gaat debuggen is frm.cmbMerk.SelectedValue nothing en blijft ook het nothing ook na de 2e regel.

Wat wel werkt is:
Visual Basic .NET:
1
2
3
4
5
Dim frm as new DetailForm()
frm.Visible = true
frm.cmbMerk.SelectedValue = Artikel.MerkNr
frm.Visible = false 'Anders kan je showdialog niet aanroepen.
frm.ShowDialog

Maar dit lijkt mij niet de oplossing, al werkt het gewoon goed. Of heeft MS het wel zo bedoeld?
Heb ik iets over het hoofd gezien? Heb ik het databinden niet helemaal begrepen? Doe ik iets in de verkeerde volgorde?

Het betreft .NET 1.1 en ik heb al wel wat gegoogled maar ik kan niets vinden. Misschien zoek ik verkeerd, laat maar horen.

EDIT: Misschien ook van belang: nadat de datatable gevuld wordt, wordt de defaultview gesorteerd.

[ Voor 3% gewijzigd door Arie-Kanarie op 07-03-2008 10:06 . Reden: combobox prefix gegeven ]

Software ontwikkelen in de Achterhoek voor leuke klanten door heel Nederland? Klik hier


Verwijderd

Merk is de naam van de combobox?

Je geeft aan dat Merk nothing blijft in het eerste voorbeeld, terwijl je verwacht dat deze geinitialiseerd wordt in de constructor van lijn 1. Als je de twee voorbeelden doorloopt met een breakpoint en dan F11 zul je zien waarom het in het eerste voorbeeld niet goed gaat en het tweede wel.

Overigens is het gewoonte om variabelen met een kleine letter te beginnen: b.v. comboboxMerk is een stuk duidelijker.

edit:

Je kan iets als frm.Merk.SelectedValue = Artikel.MerkNr ook beter in de constructor van het nieuwe form zetten. Op die manier wordt het uitgevoerd voor elke nieuwe instantie van het form en hoeft je niet op elke plaats waar je een nieuw details form maakt dit opnieuw uit te voeren.

[ Voor 24% gewijzigd door Verwijderd op 06-03-2008 12:09 ]


  • Arie-Kanarie
  • Registratie: Juli 2004
  • Laatst online: 21-06 13:40

Arie-Kanarie

Een keer wat anders

Topicstarter
Verwijderd schreef op donderdag 06 maart 2008 @ 12:07:
Merk is de naam van de combobox?

Je geeft aan dat Merk nothing blijft in het eerste voorbeeld, terwijl je verwacht dat deze geinitialiseerd wordt in de constructor van lijn 1. Als je de twee voorbeelden doorloopt met een breakpoint en dan F11 zul je zien waarom het in het eerste voorbeeld niet goed gaat en het tweede wel.
Merk is naam van combobox, heb nu ff prefix ervoor gezet.
cmbMerk.SelectedValue is nothing. cmbMerk is volgens mij niet nothing (moet ik voor de zeker even nakijken, tis niet echt mijn probleem, collega is/was hier mee bezig.)
...
Je kan iets als frm.Merk.SelectedValue = Artikel.MerkNr ook beter in de constructor van het nieuwe form zetten. Op die manier wordt het uitgevoerd voor elke nieuwe instantie van het form en hoeft je niet op elke plaats waar je een nieuw details form maakt dit opnieuw uit te voeren.
Is misschien wel een betere oplossing ja, had ik zelf ook aan kunnen denken 8)7
Dan moet Artikel natuurlijk wel meegeven worden aan de contructor, maar dat is vast geen probleem.
Scheelt inderdaad nog al wat code elke keer opnieuw uitvoeren, want naast merk worden er natuurlijk nog meer eigenschappen ingevuld.

Software ontwikkelen in de Achterhoek voor leuke klanten door heel Nederland? Klik hier


  • Arie-Kanarie
  • Registratie: Juli 2004
  • Laatst online: 21-06 13:40

Arie-Kanarie

Een keer wat anders

Topicstarter
UPDATE:
Het instellen van cmbMerk.SelectedValue in de sub New (na InitializeComponent) van het DetailForm heeft ook geen zin :(
De datasource van cmbMerk is een datatable die in een dataset zit. De dataset is op designbasis gemaakt en de datatable is ook op designbasis gekoppeld.
In de sub New van DetailForm wordt de datatable in de dataset gevuld. Niet met data uit een sql-database maar met data uit een (cobol)bestand.

Op het moment dat je frm.Visible = true of frm.Show doet gebeurt er iets dat ervoor zorgt dat de comboboxen volledig ingesteld worden.
Op designbasis staat namelijk ook ingesteld dat het detailform CenterParent moet staan. Als je snel achterelkaar het formulier oproept en weer sluit (dat kan dmv. sneltoetsen) zie je ook het formulier verspringen naar centerparent.
Wat gebeurt er op het moment dat het formulier visible (oftewel gepaint) wordt? En kan ik dat ook handmatig aanroepen?

[ Voor 4% gewijzigd door Arie-Kanarie op 07-03-2008 10:12 . Reden: aangeven dat data niet uit database komt ]

Software ontwikkelen in de Achterhoek voor leuke klanten door heel Nederland? Klik hier


  • MrSleeves
  • Registratie: Februari 2004
  • Laatst online: 13-10 22:03

MrSleeves

You'll thank me later.

Probeer of het veranderen van de waarde met SelectedIndex wel werkt.
Als dat zo is, kun je met Combobox.FindString de index opzoeken van de waarde die je wilt weergeven.

30Drie Web Design & IT Consultancy | Raven Consultancy Services


  • Arie-Kanarie
  • Registratie: Juli 2004
  • Laatst online: 21-06 13:40

Arie-Kanarie

Een keer wat anders

Topicstarter
We hebben het anders opgelost:
Het artikelobject wordt meegegeven aan sub New en alle velden en comboboxen worden nu gevuld in de form_load. Daar werkt cmbMerk.SelectedValue = Artikel.MerkNr wel.

De oplossing van MrSleeves was niet helemaal een optie omdat we dan eerst in de Merken de Merknaam bij MerkNr moeten uitlezen, die tekst weer meegeven aan de FindString om de gewenste index te vinden. Beetje overdreven vonden wij.

Mijn conclusie: Combobox.SelectedValue = x werkt pas in de form_load of later (als het formulier al visible is) en hier mag een slotje op.

Software ontwikkelen in de Achterhoek voor leuke klanten door heel Nederland? Klik hier

Pagina: 1