[VB.NET] probleem bij overerven DataGridTextBoxColumn

Pagina: 1
Acties:

  • MrSleeves
  • Registratie: Februari 2004
  • Laatst online: 10-04 19:23

MrSleeves

You'll thank me later.

Topicstarter
Ik zit met een probleempje bij het maken van een DatagridColumnStyle waarin een Combobox en een button inzitten.
Op zich werkt dat deel best aardig. Combobox doet het, knopje doet het (met uitzondering dat als je een waarde selecteert en je gaat naar een andere rij, dattie dan de waarde niet overneemt; maar dat is nu niet van belang).

Wat er echt misgaat is dat als je een tekst invoert in de Combobox, of een tekst selecteert uit het pulldownmenu van de Combobox, dat er dan geen nieuwe rij onder verschijnt: zo'n lege rij met een asterisk ervoor. Als in de tabel een column zit met een normale DataGridTextBoxColumn en je typt daar iets, dan verschijnt de lege rij (met asterisk) wel.

Nu heb ik getest of het ligt aan het feit dat je niets intypt in de Textbox van de DatagridTextboxColumn en dat blijkt inderdaad zo te zijn. Als je de Textbox.Text in code een waarde geeft, dan verschijnt die nieuwe rij ook niet. Dus in code de waarde die je in de Combobox krijgt doorgeven aan de Textbox heeft geen zin.

Het lijkt dus alsof de nieuwe rij aangemaakt wordt door een KeyPress, KeyDown of KeyUp event van de Textbox. Maar daar kan ik natuurlijk niet bij.

Weet iemand hoe ik die nieuwe rij te voorschijn kan krijgen? Alle subs en functions die ik overerf roepen ook de oorspronkelijke functies aan, dus dat kan het niet zijn.
Ook nog "wanhopige" dingen geprobeerd zoals in regel 230 (Textbox waarde geven) en 231 (EndEdit). ConcedeFocus (regel 247) bleek het ook niet te zijn.

Ik weet ook dat er wat nettere manieren zijn om een Combox in een datagris te zetten; werken met de SelectionChangeCommitted en Leave event van de Combobox enzo. En de Scroll van de Datagrid afvangen. Maar ik kan me niet voorstellen dat daardoor die nieuwe rij wel verschijnt. En dat wil ik eigenlijk eerst opgelost hebben.

De code:-snip-

[ Voor 88% gewijzigd door whoami op 13-10-2005 15:02 ]

30Drie Web Design & IT Consultancy | Raven Consultancy Services


  • MrSleeves
  • Registratie: Februari 2004
  • Laatst online: 10-04 19:23

MrSleeves

You'll thank me later.

Topicstarter
Om mijn eigen topic maar even schaamteloos te kicken:

Heeft niemand een idee of stel ik gewoon te moeilijke vragen (of beide).
Heeft iemand anders een voorbeeld gevonden die zeker werkt, want dan leg ik de twee stukken code gewoon naast elkaar (hoewel dat met mijn eigen vondsten ook niet werkte.. vandaar dat er zo overdreven veel "gecommit" wordt).

De bedoeling is overigens dat er in het Datagrid snel wijzigingen gemaakt kunnen worden. Daarom wilde ik het liefst gewoon alles met tab doen en komt die automatische nieuwe rij zo mooi uit. Hoef je niet steeds op een knopje te klikken ofzo.

30Drie Web Design & IT Consultancy | Raven Consultancy Services


Verwijderd

Allereerst, je verontschuldigt je voor de grote hoeveelheid code, maar dit was echt niet nodig geweest. Code voor de constructor e.d. is niet echt relevant, dit had je wel weg kunnen laten.

Hier is het nl. niet de bedoeling je code te posten en te vragen wat niet werkt. En je kick had je kunnen voorkomen door je post te editten :).

Maar ik snap niet precies wat je met die asterisk bedoelt?? Als er waarden in die combobox staan, en je typt de eerste letters in, zou hij toch die waarde moeten selecteren (dat is volgens mij de essentie van een combobox). Ik gebruik nooit comboboxen, dus dat weet ik niet zeker.

Post dus even de relevante code... Hier heeft niemand iets aan.

[ Voor 6% gewijzigd door Verwijderd op 13-10-2005 14:55 ]


  • Boss
  • Registratie: September 1999
  • Laatst online: 20:24

Boss

+1 Overgewaardeerd

VB.NET is niet mijn ding, en zulke lange code doorlezen al helemaal niet, maar het enige wat ik kan bedenken:

Ik neem aan dat het grid gekoppeld is aan een recordsource. Als je nu na het wijzigen van die box direct het record opslaat, triggerd dat dan niet ook meteen het aanmaken van een volgend (leeg) record?

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • MrSleeves
  • Registratie: Februari 2004
  • Laatst online: 10-04 19:23

MrSleeves

You'll thank me later.

Topicstarter
Verwijderd schreef op donderdag 13 oktober 2005 @ 14:53:
Maar ik snap niet precies wat je met die asterisk bedoelt?? Als er waarden in die combobox staan, en je typt de eerste letters in, zou hij toch die waarde moeten selecteren (dat is volgens mij de essentie van een combobox). Ik gebruik nooit comboboxen, dus dat weet ik niet zeker.
Het gaat om een combobox in een datagrid. In datagrid is er altijd een nieuwe rij beschikbaar. Die bestaat nog niet (vandaar de asterisk), maar wel zodra je in een veld een waarde invult. Zodra je dat doet, wordt er direct weer een nieuwe rij ondergezet (met asterisk). Als er over het tekstveld een combobox wordt gezet, zodat je de waarden daaruit kan halen, dan werkt dat dus niet meer (geen nieuwe rij). En het doorgeven van de waarde van de combobox werkt ook niet.
Post dus even de relevante code... Hier heeft niemand iets aan.
Dat is dus beetje het probleem. Het was of de hele class neerzetten of helemaal niet. Ik weet niet wat ik waar vergeten ben. En hier vervolgens alle mogelijkheden langs te laten komen, lijkt me ook niet werken. Ik kan wel zeggen wat ik allemaal geprobeerd heb, maar dat komt praktisch neer op eenzelfde verhaal als de hele code.
Boss schreef op donderdag 13 oktober 2005 @ 14:56:
Ik neem aan dat het grid gekoppeld is aan een recordsource. Als je nu na het wijzigen van die box direct het record opslaat, triggerd dat dan niet ook meteen het aanmaken van een volgend (leeg) record?
Euhm.. er is niet zoveel op te slaan. De DataTable die aan het grid zit wordt aangemaakt en is alleen een hulpmiddel. Maar ik zou een AcceptChanges nog kunnen proberen (hoewel dat eigenlijk niet zou moeten werken

[ Voor 39% gewijzigd door MrSleeves op 13-10-2005 15:24 . Reden: Verkeerd gelezen ]

30Drie Web Design & IT Consultancy | Raven Consultancy Services


  • whoami
  • Registratie: December 2000
  • Laatst online: 29-04 13:16
Ik heb de code maar verwijderd, want er is toch geen enkel zinnig mens die zo'n lap code gaat doornemen.

Welke data bind je aan die grid ? Zijn het datatables/datasets of custom objects ?

https://fgheysels.github.io/


  • MrSleeves
  • Registratie: Februari 2004
  • Laatst online: 10-04 19:23

MrSleeves

You'll thank me later.

Topicstarter
Aan het grid zit een DataTable. Aan de hand daarvan kunnen er een aantal (of alle) kolommen een combobox (en een button) krijgen. Kolommen die geen combobox hebben, zijn gewone DataGridTextBoxColumn-en. Als die er tussen zitten en je vult daar een waarde in, is die nieuwe rij er direct. Bij de combobox gebeurt er niets.

AcceptChanges werkt ook niet. De rij die je aan het editten bent, de eerste rij (de eerste lege rij wordt nog wel weergegeven), dan kan accepteert de row geen acceptchanges, want de rij zit nog niet aan de DataTable vast. Als je in plaats daarvan de hele DataTable, maar een AcceptChanges geeft, wordt de nog niet gekoppelde rij nooit aan de tabel gekoppeld.

[ Voor 37% gewijzigd door MrSleeves op 13-10-2005 15:26 ]

30Drie Web Design & IT Consultancy | Raven Consultancy Services

Pagina: 1