[VB.net] Cel kleuren in Datagridview werkt niet.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste mensen,

Ik ben bezig met het schrijven van een RisicoAnalyse Applicatie, ik loop alleen tegen een probleem aan, ik laat 2 kolommen uit tbl_kaartkleuren in in een datagridview (namelijk: Risicoomschrijving & kleurcode_standaard, in de kolom kleurcode standaard staat een HTML kleurcode en in risico omschrijving staat een tekst van waarschijnlijk 1 woord (kunnen er ook 2 zijn). In de datagridview staat in de eerste kolom de kleurcode, nu wil ik dat de cel ook in die kleur wordt weergegeven. Nu ben ik al zover dat ik tot deze code ben gekomen:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
        Dim i As Integer = 0

        Do Until i = Me.DataGrid_legenda.RowCount
            Dim HTML_kleurcode As String = Me.DataGrid_legenda.Item("kleurcode_standaard", i).Value

            Dim mijnkleur As Color = ColorTranslator.FromHtml(HTML_kleurcode)

            Me.DataGrid_legenda.Item("kleurcode_standaard", i).Style.BackColor = mijnkleur
            i = i + 1
        Loop


Wanneer ik deze code draai krijg ik geen foutmelding o.i.d. alleen krijg ik ook de kleuren niet te zien.... Terijl wanneer ik de hele kolom weer wil geven in die kleur werkt het wel...

Wie kan mij vertellen waar het fout gaat?

Groetjes Kevin

[ Voor 0% gewijzigd door Verwijderd op 06-11-2009 11:19 . Reden: loop vergeten te plaatsen. ]


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 17-09 18:39

Matis

Rubber Rocket

Ik zie dat je helemaal niets doet met je i, die zal voor zover ik deze code zie altijd 0 blijven :/

Edit; wat is er mis met: http://www.vbib.be/index....B2&file=viewtopic&p=40692

[ Voor 32% gewijzigd door Matis op 06-11-2009 09:22 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Er is niets mis met VBIB alleen had nog geen reactie gehad en toen raadde een vriend van mij mij aan om het eens hier ook te proberen ;) Want aangezien er nog niemand gereageerd heeft (wat ik niet gewend ben van VBIB, daar weet iedereen geloof ik alles uti zijn hoofd) denk ik, laat k het dan maar hier ook proberen wanneer ik hier een antwoord krijg kan ik dat antwoord doorkopieren naar vbib ;)

Groetjes

P.S. klopt ik ben de loop vergeten mee te kopieren, maar waarom kleurt de cel nou niet vraag ik me af.

Acties:
  • 0 Henk 'm!

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 13-09 21:30
Zet er eens een breakpoint neer en kijk wat mijnkleur wordt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb het inderdaad net op een andere manier geprobeerd en het werkt wel, ik heb eerst een msgbox geplaatst met de celkleur VOORDAT de cel gekleurd moet worden en dan geeft hij een lege msgbox weer, dat klopt want er zit geen kleur in, maar na het plaatsen van de kleur krijg ik wel een waarde in de msgbox, dus in principe heeft hij dus wel een kleur maar geeft deze gewoon niet weer :S

De kleurcode die hij aangeeft NADAT de cel gekleurd is is: COLOR(A=255, R=0, G=204, B=255), dit zou als kleur ROOD moeten zijn, en dit klopt ook want wanneer ik in plaats van

code:
1
Me.DataGrid_legenda.Item("kleurcode_standaard", i).Style.BackColor = mijnkleur


dit plaats:

code:
1
me.datagrid_legenda.column("kleurcode_standaard").DefaultCellStyle.BackColor = mijnkleur


kleurt hij wel de gehele kolom (en dat zie je dan ook), daarom kom ik er dus ook niet uit ;)

Groetjes Kevin

[ Voor 40% gewijzigd door Verwijderd op 06-11-2009 09:49 ]


Acties:
  • 0 Henk 'm!

  • YakuzA
  • Registratie: Maart 2001
  • Niet online

YakuzA

Wat denk je nou zelluf hey :X

Ik heb een tijdje geleden inderdaad ook veel gekloot met het cellen kleurtjes geven in een DataGridView.
Het kwam er op neer dat allerlei methodes die zouden moeten werken het gewoon niet doen zoals verwacht, de eerste gevonden manier om een cel te kleuren heb ik hieronder gezet:

Visual Basic .NET:
1
2
3
4
5
6
7
8
    Private Sub dgv_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView0.CellFormatting
        Dim dgv As DataGridView = CType(sender, DataGridView)
        If e.ColumnIndex = 1 And e.RowIndex >= 0 Then
            If dgv.Rows(e.RowIndex).Cells(e.ColumnIndex).Value.ToString.Equals("Busy") Then
                    e.CellStyle.BackColor = Color.Red
            End If
        End If
    End Sub


Deze code zorgt er voor dat bij het formatten kolom 1 wordt doorgelicht, als hier "Busy" staat, dan kleurt hij de cel rood.

Hopelijk kun je het ook op deze manier toepassen in je app.

[ Voor 3% gewijzigd door YakuzA op 07-11-2009 18:24 ]

Death smiles at us all, all a man can do is smile back.
PSN


Acties:
  • 0 Henk 'm!

  • Giem
  • Registratie: Augustus 2004
  • Laatst online: 22:01
In plaats van de stijl hard te coderen kan je er ook css klassen aan koppelen. Dit geeft meer vrijheid als je later nog eens de kleuren wil aanpassen, en je kan ik de html bron makkelijk zien of je klasse wordt gebruikt in de datagridview.

Laat maar, het is weekend, ik zat nog te slapen.

[ Voor 10% gewijzigd door Giem op 07-11-2009 19:50 ]


Acties:
  • 0 Henk 'm!

  • YakuzA
  • Registratie: Maart 2001
  • Niet online

YakuzA

Wat denk je nou zelluf hey :X

Giem schreef op zaterdag 07 november 2009 @ 18:36:
In plaats van de stijl hard te coderen kan je er ook css klassen aan koppelen. Dit geeft meer vrijheid als je later nog eens de kleuren wil aanpassen, en je kan ik de html bron makkelijk zien of je klasse wordt gebruikt in de datagridview.
Ik heb nog nergens iets gelezen over asp.net of over HTML output, dit kan een valide oplossing kan zijn voor de TS als hiervan gebruik gemaakt wordt :)

[ Voor 5% gewijzigd door YakuzA op 07-11-2009 19:29 ]

Death smiles at us all, all a man can do is smile back.
PSN


Acties:
  • 0 Henk 'm!

  • Giem
  • Registratie: Augustus 2004
  • Laatst online: 22:01
YakuzA schreef op zaterdag 07 november 2009 @ 19:22:
[...]


Ik heb nog nergens iets gelezen over asp.net of over HTML output, dit kan een valide oplossing kan zijn voor de TS als hiervan gebruik gemaakt wordt :)
Ja ik zat ook al een beetje te twijfelen..

Hij heeft het ook over een datagridview en die heb je ook niet in asp.net.. alleen de gridview.

Acties:
  • 0 Henk 'm!

  • CMG
  • Registratie: Februari 2002
  • Laatst online: 10-12-2024

CMG

Los van je issue: wellicht is het handiger om je loop om te schrijven in een for loop? Scheelt weer een paar regels en je ziet sneller welke regels onderdeel zijn van de loop logica en wat echte code is. Wat jij doet is niet fout, het is enkel een tipje.
Visual Basic .NET:
1
2
3
For i as integer = 0 to Me.DataGrid_legenda.RowCount -1

Next


m.b.t. je issue: failed hij niet silent? Ik zou even een breakpoint zetten en er stap voor stap door heen lopen om te zien of alle code wel gehit worden en de verwachte resultaten bevat.

[ Voor 21% gewijzigd door CMG op 07-11-2009 19:56 ]

NKCSS - Projects - YouTube


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
YakuzA schreef op zaterdag 07 november 2009 @ 18:23:
Ik heb een tijdje geleden inderdaad ook veel gekloot met het cellen kleurtjes geven in een DataGridView.
Het kwam er op neer dat allerlei methodes die zouden moeten werken het gewoon niet doen zoals verwacht, de eerste gevonden manier om een cel te kleuren heb ik hieronder gezet:

Visual Basic .NET:
1
2
3
4
5
6
7
8
    Private Sub dgv_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView0.CellFormatting
        Dim dgv As DataGridView = CType(sender, DataGridView)
        If e.ColumnIndex = 1 And e.RowIndex >= 0 Then
            If dgv.Rows(e.RowIndex).Cells(e.ColumnIndex).Value.ToString.Equals("Busy") Then
                    e.CellStyle.BackColor = Color.Red
            End If
        End If
    End Sub


Deze code zorgt er voor dat bij het formatten kolom 1 wordt doorgelicht, als hier "Busy" staat, dan kleurt hij de cel rood.

Hopelijk kun je het ook op deze manier toepassen in je app.
Zou je me nog even kunnen uitleggen wat je bedoeld met:
ByVal sender As Object
ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs

Wat moet ik meegeven aan de code bij deze variabelen?

@CMG, thnx voor de tip ik ga me er zeker in verdiepen, op een hele applicatie scheelt iedere keer een paar regels toch ontzettend veel ;)

Groetjes Kevin

Acties:
  • 0 Henk 'm!

  • CMG
  • Registratie: Februari 2002
  • Laatst online: 10-12-2024

CMG

Verwijderd schreef op zondag 08 november 2009 @ 15:52:
[...]


Zou je me nog even kunnen uitleggen wat je bedoeld met:
ByVal sender As Object
ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs

Wat moet ik meegeven aan de code bij deze variabelen?

@CMG, thnx voor de tip ik ga me er zeker in verdiepen, op een hele applicatie scheelt iedere keer een paar regels toch ontzettend veel ;)

Groetjes Kevin
NP.

Sender as object en e as eventargs zijn standaard paramenters die te maken hebben met het event dat je afhandeld, in dit geval het CellFormatting event.

NKCSS - Projects - YouTube


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wanneer ik (even zonder aanpassingen) de code van Yakuza plak in mijn applicatie en ik call de sub wil hij de parameters gespecificeerd hebben, hij geeft namelijk de volgende melding wanneer ik de sub call dmv

call dgv_cellformatting()

hierbij de foutmeldingen:
- Argument not specified for parameter 'e' of 'Private Sub dgv_CellFormatting(sender As Object, e As
System.Windows.Forms.DataGridViewCellFormattingEventArgs)'.
- Argument not specified for parameter 'sender' of 'Private Sub dgv_CellFormatting(sender As Object, e As System.Windows.Forms.DataGridViewCellFormattingEventArgs)'.

Sorry, mijn vraag zal wel ontzettend stom zijn maar ik ben nog niet zo ontzettend bedreven met het VB.net proces. En tja hier leer ik het meeste van zullen we maar zeggen ;)

Thnx in ieder geval voor jullie hulp.


Never mind bovenstaande, het is me al gelukt, ik denk weer veel en veel te moeilijk... het is natuurlijk gewoon een sub net alsof je op een knop klikt, in ieder geval iedereen heel hartelijk bedankt voor jullie hulp!

Het enige waar ik nu nog mee zit is dat de eerste cel (item(0,0) zeg maar is standaard geselecteerd. Is het mogelijk om dit ook uit te zetten zodat het datagridview echt alleen maar te bekijken is, ik heb namelijk een soort legenda gemaakt van het datagridview.

Groetjes Kevin

Groetjes Kevin

[ Voor 29% gewijzigd door Verwijderd op 08-11-2009 16:35 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ook dit is me inmiddels gelukt,
het ging om de code:

MapOfTheWorldWindow.DataGrid_legenda.CurrentCell = Nothing

Thnx voor jullie hulp!

Groetjes Kevin

Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 01:05

Reptile209

- gers -

Als je de grid alleen als legenda wil laten zien, zou ik de property Enabled op False zetten. Zoals je het nu oplost (CurrentCell = Nothing), kan de user nog steeds een cell selecteren. Dan ziet het er alsnog niet netjes uit.

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja sorry dat was ik vergeten te melden, ik heb inderdaad enabled op false gezet zodat er helemaal niets meer geselecteerd kan worden, dit alleen was helaas niet voldoende doordat cel (0,0) automatisch geselecteerd wordt, dus die zet ik uit en disable de datagridview.
Pagina: 1