[C#] DataGridView FormatException

Pagina: 1
Acties:
  • 121 views sinds 30-01-2008
  • Reageer

  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 17-02 11:01
Hallo,

Ik heb een form waarop een DataGridView geplaatst is. Ik heb kolommen aangemaakt van diverse soorten (text,checkbox en dropdown). Het werkt allemaal goed behalve 1 ding. Als ik AllowUserToAddRows bij de properties op true zet (wat ik nodig heb voor mijn programma) loopt de zaak de mist in. Als ik met mijn muis over het checkboxveld ga krijg ik de foutmelding "System.FormatException: Formatted value of the cell has a wrong type" in het DataError event van de control. Deze zelfde fout krijg ik als een row met een checkbox er in de 'focus' (*) krijgt.

Ik heb al verschillende dingen geprobeerd zoals de FalseValue/TrueValue/IndeterminateValue waardes veranderen en in de DefaultCellStyle een NullValue opgeven. (true,false,0,1,tekst)

Als ik het DataError event een 'lege' functie laat aanroepen krijg ik de fout natuurlijk niet, maar als ik dan een tweede nieuwe row wil toevoegen in mijn programma, dan verschijnt er op de plek waar het hoort geen checkbox meer.

Iemand een idee?

  • whoami
  • Registratie: December 2000
  • Laatst online: 13:43
Nee.

Het blijft nl. nogal abstract. Welke code heb je dan wel in die event-handler ?
En op welke lijn krijg je die exceptie precies ?

Heb je de stacktrace van de exceptie al eens bekeken ?

[ Voor 10% gewijzigd door whoami op 05-10-2005 13:14 ]

https://fgheysels.github.io/


  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 17-02 11:01
Door een lege functie aan te roepen als die event handler 'negeer' ik die exceptions dus. Beetje heel smerig, maar ik probeerde dit omdat ik het op de traditionele manier niet aan de gang kreeg.

Het gaat dus eigenlijk om een DataGridView waarin ik een aantal columns heb aangemaakt. Een van die columns bevat een checkbox. Als AllowUserToAddRows=true dan krijg ik die exception. Als ik de checkbox column er dan uit haal, is het probleem er niet.

Edit: De stacktrace is leeg.....

[ Voor 6% gewijzigd door ruuds op 05-10-2005 13:19 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 13:43
WAAR krijg je die exception ?
Wat zegt de stacktrace van die exception ?
Wat zie je als je mbhv de stacktrace gaat gaan kijken welke code er staat op de plaats waar die exceptie gegooid werd ?
Edit: De stacktrace is leeg.....
:? Da's wel onwaarschijnlijk...
Heeft je exceptie ook een waarde voor de 'InnerException' property ?
Zoja, wat zegt de stacktrace van de InnerException

[ Voor 35% gewijzigd door whoami op 05-10-2005 13:21 ]

https://fgheysels.github.io/


  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 17-02 11:01
De InnerException = null

Van de exception is alleen het Message 'veld' ingevuld, en deze bevat dus "Formatted value of the cell has a wrong type".
If I understand this scenario correctly CheckBoxColumn should be able to handle adding new rows without this error. To get around this error you can either set the Column.DefaultCellStyle.DataSourceNullValue to the value that causes the format exception or handle the CellFormatting event of the DataGridView to format the cell.
vanaf de msdn fora, werkt ook niet voor mij...

  • D4Skunk
  • Registratie: Juni 2003
  • Laatst online: 20-10-2025

D4Skunk

Kind of Blue

IMHO moet je in je datasource defaultvalue true of false voorzien in je kolom.
Uit het hoofd, dus syntax kan ik niet garanderen :
C#:
1
ds.Tables["ABC"].Columns["CHECKBOXCOL"].DefaultValue = true;

  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 17-02 11:01
Aan mijn DataGridView heb ik geen datasource gekoppeld. Ik maak de kolommen aan tijdens het ontwerpen, en zet er dan met een simpel loopje later gegevens in. Maar dit probleem doet zich al voor als er geen gegevens in staan, de enige row is de row waarmee je een nieuw item kan toevoegen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 13:43
Ja, maar die row zal toch gegevens moeten representeren ?
Dus, die gegevens moeten toch ergens vandaan komen ?

https://fgheysels.github.io/


  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 17-02 11:01
Klopt, maar met bijvoorbeeld grid.Rows.Add("veld1","veld2","veld3"); worden de rows toegevoegd.

Edit: En de gebruiker moet dus ook in het programma zelf rows kunnen toevoegen, wat nu niet werkt.

[ Voor 46% gewijzigd door ruuds op 05-10-2005 14:27 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 13:43
Bekijk het eens zo: de gebruiker moet geen rijen toevoegen, maar gegevens toevoegen. Die gegevens worden dan voorgesteld dmv een rij in je grid.

Je zult zowiezo toch moeten gegevens hebben die je in je grid wilt tonen ? Maw: de rijen in je grid moeten toch iets voorstellen ?

https://fgheysels.github.io/


Verwijderd

Volgens mij gaat dit fout omdat checkboxen e.d. niet 'Nothing' als waarde kunnen hebben. Als je geen dataset/datatable (of view) aan je grid gekoppled hebt, zal er bij het initalizeren standaard nothing in alle cellen van de rij geschreven worden. Wat je zou kunnen proberen is stoeien met het CellValueNeeded event. Volgens mij is dat wel de plek om bijvoorbeeld checkboxen naar false te initializeren
Pagina: 1