Toon posts:

[ASP.NET] Kleuren van rijen in datagrid

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

Verwijderd

Topicstarter
Hallo, ik ben momenteel ASP.NET aan het leren en ik zit met een probleem waar ik niet uitgeraak.

Ik wil een datagrid maken, waarvan elke rij een andere achtergrond kleur heeft en waar de naam van de kleur instaat. Die kleuren worden uit een array gehaald. Het probleem is nu als volgt: in alle 6 rijen wordt de kleurnaam weergegeven maar alleen de eerste 5 rijen worden effectief ingekleurd.

Voor zover ik weet heeft dit te maken met het feit dat de gebeurtenis ItemCreated actief wordt voordat het item effectief gemaakt is en dus stel je de kleur in van de vorige gemaakte rij. Dit heeft dan als gevolg dat de laaste rij niet ingekleurd kan worden omdat bij de laatste gebeurtenis de voorlaatste rij werd ingekleurd.

Is er iemand die hier een oplossing voor weet?

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Hoe kleur je je rijen in? Je hebt nl. een aantal templates die die kleurtjes enzo voor jou kunnen verzorgen.

https://fgheysels.github.io/


  • SoLiS
  • Registratie: Mei 2003
  • Laatst online: 31-03 08:33
Je kunt een dataview maken met een datatable daarin, waarin je de kleuren van de array instopt. Je kunt dan de databind-functie van het datagrid gebruiken. Je kunt daarna nog gebruik maken van het event databound en alle items van het grid doorlopen met een foreach.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Itembound gebruiken ipv ItemCreated?

[ Voor 18% gewijzigd door gorgi_19 op 12-08-2003 09:02 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
SoLiS schreef op 12 August 2003 @ 08:43:
Je kunt daarna nog gebruik maken van het event databound en alle items van het grid doorlopen met een foreach.
Het DataBound event wordt getriggerd per row.

Waarom zou je nog eens alle items willen doorlopen als die al gebinded zijn?

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
gorgi_19 schreef op 12 August 2003 @ 08:47:
Itembound gebruiken ipv ItemCreated?
Dat kan je idd doen, maar naar ik begrijp uit de topicstart heeft de TS probleem bij het 'inkleuren' van z'n rows.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 12 August 2003 @ 08:51:
[...]


Dat kan je idd doen, maar naar ik begrijp uit de topicstart heeft de TS probleem bij het 'inkleuren' van z'n rows.
Ik vind het sowieso vaag; alle andere voorbeelden op Internet, bijvoorbeeld met het optellen van data, gaat het wel goed.

Eventueel kan je ook nog een templatecolumn maken (* gorgi_19 is fan van templatecolumns).

* gorgi_19 vindt trouwens ook dat de topicstarter aardig z'n best doet om het probleem zo abstract mogelijk neer te zetten... :)

[ Voor 27% gewijzigd door gorgi_19 op 12-08-2003 09:02 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Ah, de TS wil niet dat iedere row in dezelfde kleur is, maar in de kleur die ook in die rij staat.
Dan heb je idd het DataBound event nodig.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 12 augustus 2003 @ 08:59:
Ah, de TS wil niet dat iedere row in dezelfde kleur is, maar in de kleur die ook in die rij staat.
Dan heb je idd het DataBound event nodig.
offtopic:
Of je me niet meer zo aan het twijfelen wil brengen... :+

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • SoLiS
  • Registratie: Mei 2003
  • Laatst online: 31-03 08:33
whoami schreef op 12 August 2003 @ 08:48:
[...]

Het DataBound event wordt getriggerd per row.

Waarom zou je nog eens alle items willen doorlopen als die al gebinded zijn?
Je hebt gelijk. Ik heb even twee methodes door elkaar gehaald. Je gebruikt dus of foreach item, of je gebruikt het item_databound event.

Verwijderd

Topicstarter
Alvast bedankt voor de reacties. Ik zal alles nog eens op een rijtje zetten met wat code erbij.

Het aanmaken van de array waar de kleuren worden uitgehaald:
code:
1
2
3
4
5
6
7
dim arrColors() as string
if viewstate("Colors") is nothing then
    arrColors = new string(6) {"red","orange","yellow","green","blue","indigo","violet"}
    viewstate("Colors") = arrColors
else
    arrColors = viewstate("Colors")
end if

Het inkleuren gebeurd in verander_kleur en wordt opgeroepen bij OnItemCreated van de datagrid(die laaste noemt dgColors):
code:
1
2
dgColors.items(intindex - 1).backcolor = drawing.color.fromname _
                (ds.tables("Colors").rows(intindex - 1) ("Color"))

intindex wordt met behulp van e.item.itemindex op de huidige rij gezet in het begin van de methode verander_kleur.
De uiteindelijke bedoeling is dus een tabel met als uitgangspunt 6 rijen in verschillende kleuren. In een rij staat als tekst bv rood en de achtergrond kleur is dan ook effectief rood. Je kan dit wijzigen door een een andere kleur in een rij te typen waarna die dus de gewenste achtergrond kleur krijgt. Dit werkt zoals eerder gezegd perfect voor de eerste 5 rijen. De laaste rij wordt echter nooit ingekleurd, maar de tekst wijzigt wel mee.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Doe het inkleuren dus nu eens in de ItemDataBound ipv de ItemCreated.

Je moet de reacties dus ook lezen

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ik ben nog maar een beginner, dus verbeter mij als ik fout ben.
The ItemDataBound event is raised after an item is data bound to the DataGrid control. This event provides you with the last opportunity to access the data item before it is displayed on the client. After this event is raised, the data item is nulled out and no longer available.
Wil dit zeggen dat alle kleurinformatie in de state bag na dit event verloren gaat? Of ben ik nu totaal in de war?

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Dit wil zeggen dat je in dat event de laatste dingen kunt doen, zoals bv een kleurtje aan je rij geven.
Probeer het ff uit zou ik zeggen (en kijk ook naar de parameters die je in die functie meekrijgt.)

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ik heb het nu eens geprobeerd met OnItemDataBound maar net zoals met OnItemCreated blijft de laatste rij ongekleurd met als gevolg dat ik nu muurvast zit.
Is er misschien iemand die mij nog wat aanwijzingen/tips kan geven?

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Verwijderd schreef op 12 August 2003 @ 13:29:
Ik heb het nu eens geprobeerd met OnItemDataBound maar net zoals met OnItemCreated blijft de laatste rij ongekleurd met als gevolg dat ik nu muurvast zit.
Is er misschien iemand die mij nog wat aanwijzingen/tips kan geven?
Ik heb nog een tip:
debug je code eens.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 12 augustus 2003 @ 13:32:
[...]


Ik heb nog een tip:
debug je code eens.
Aanvulling hierop:
Tip: Trace

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Ik heb het net ff geprobeerd en het werkt perfect bij mij, met die ItemDatabound.

Dus, zeker je code eens debuggen en kijken wat er gebeurd.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Nou, bij het tracen verloopt alles normaal zoals het zou moeten gaan, alleen blijf ik met hetzelfde probleem zitten.
@whoami: heb jij de rijen ook met dgColors.items(intindex - 1).backcolor ingekleurd of heb jij iets anders gebruikt?
Het zal de hitte wel zijn zeker :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Ik heb iets anders gebruikt.
Ik heb je toch gezegd dat je eens naar de parameters moet kijken die die ItemBound event-handler heeft.... Het zijn er 2; die 2de is interessant.

Deze dus:
code:
1
System.Web.UI.WebControls.DataGridItemEventArgs e


Dit object bevat onder andere het listitem dat momenteel gebinded wordt.

[ Voor 31% gewijzigd door whoami op 12-08-2003 14:07 ]

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 12 August 2003 @ 14:02:
Nou, bij het tracen verloopt alles normaal zoals het zou moeten gaan, alleen blijf ik met hetzelfde probleem zitten.
@whoami: heb jij de rijen ook met dgColors.items(intindex - 1).backcolor ingekleurd of heb jij iets anders gebruikt?
Het zal de hitte wel zijn zeker :)
Ik bedoel niet dat je trace.axd gaat onderzoeken, ik bedoel dat je trace.write / trace.warn gebruikt om zelf data aan te vullen en zo te controleren WAT er in die method gebeurt.

Tenzij je de debugger VS.Net of vergelijkbaar bij de hand hebt.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Nu begint het mij allemaal toch wat te veel te worden dus ik ga eens even recapituleren
code:
1
2
sub changecolor(obj as object, e as DataGridItemEventArgs)
    dim intindex as integer = e.item.itemindex

Hiermee is intindex ingesteld op het indexnummer van de datagridrij en vervolgens word de rij ingekleurd met:
code:
1
2
3
if intindex > 0 then
dgColors.items(intindex-1).backcolor = drawing.color.fromname _
    (ds.tables("Colors").rows(intindex-1) ("Color"))

Ben ik nu verkeerd als ik zeg dat je de kleur moet instellen van de rij die de laatste keer dat de gebeurtenis optrad werd gemaakt?

[ Voor 3% gewijzigd door Verwijderd op 12-08-2003 14:41 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Kijk nog eens naar die DataGridItemEventArgs object.

In plaats van 'hard' naar je datagrid te gaan verwijzen in je ItemDataBound event, ga je dat DataGridItemEventArgs object gebruiken.

code:
1
2
e.Item.Cells[0].Text
e.Item.BackColor


e.Item is een verwijziging naar het huidige ListItem van je datagrid dat op dit moment gebinded wordt.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Nou, met zoveel pap in de mond is mijn euro gevallen :)
Bedankt iedereen voor de hulp _/-\o_
Pagina: 1