[C#] GetChildRows en sorteren

Pagina: 1
Acties:

  • Zyphrax
  • Registratie: September 2001
  • Laatst online: 04-04-2023
In Visual Studio 2003 ben ik een webapplicatie aan het maken volgens het 3-lagenmodel. In deze webapplicatie komt een "User Manager" voor het beheer van de groepen en gebruikers van de applicatie.

Ik heb een eigen DataSet gemaakt met daarin de Users en Groups genaamd UserDS. Dit geeft mij het voordeel dat ik via de DataSet per group meteen kan vragen wat de bijbehorende (member) users en groups zijn.

Het leek mij handig om in mijn "User Manager" een tree op te nemen van alle groups en users hierarchisch weergegeven. De methode GetChildRows zou hier uitkomst bieden, omdat de DataSet dan voor mij de bijbehorende members teruggeeft. Omdat het een custom DataSet is kan ik zelfs de methode GetUserRows gebruiken (precies hetzelfde als GetChildRows, maar deze weet de relatie tussen Groups en Users) _/-\o_.

Omdat ik het 3-lagenmodel gebruik heb ik een aantal domeinklassen (zoals User, Group, etc.). De klasse Group heeft een GroupsRow genaamd Data. Hierin houd ik de gegevens van 1 Group bij.

Mijn probleem: als ik via mijn domeinklasse Group een lijst wil hebben van alle (member) Users, dan roep ik Data.GetUserRows aan waarbij ik een DataRow[] terugkrijg. Ik zou graag de lijst van Users dan sorteren op Username. Helaas heb ik hiervoor een DataView nodig, maar ik kan volgensmij de DataRow array niet zomaar omtoveren in een DataView :'(. Een andere mogelijkheid is dat ik zelf via de Select methode de (member) Users ophaal, maar ja waarom niet GetChildRows/GetUserRows gebruiken, die zijn er tenslotte voor gemaakt, bovendien geef ik mijn Domein klasse dan meer intelligentie dan nodig is.

[ Voor 4% gewijzigd door Zyphrax op 16-04-2004 12:35 ]

Any sufficiently advanced technology is equivalent to magic.


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:50

gorgi_19

Kruimeltjes zijn weer op :9

Een array heeft toch ook een Sort-method? Met een beetje pech zul je alleen een eigen comparer moeten maken.

[ Voor 45% gewijzigd door gorgi_19 op 16-04-2004 12:39 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Zyphrax
  • Registratie: September 2001
  • Laatst online: 04-04-2023
Nee, daarnaast gaat het hier om een array van objecten (DataRow objecten). Het sorteren moet gebeuren op basis van gegevens (kolom Username) in de DataRow objecten, dus een array sort functie zal hier niet werken.

Any sufficiently advanced technology is equivalent to magic.


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:50

gorgi_19

Kruimeltjes zijn weer op :9

Zyphrax schreef op 16 april 2004 @ 12:39:
Nee, daarnaast gaat het hier om een array van objecten (DataRow objecten). Het sorteren moet gebeuren op basis van gegevens (kolom Username) in de DataRow objecten, dus een array sort functie zal hier niet werken.
Dat wordt dus een eigen comparer maken; sorteren van objecten met een .Sort-method levert geen enkele problemen, mits je een eigen comparer (Zie IComparable) maakt.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Zyphrax
  • Registratie: September 2001
  • Laatst online: 04-04-2023
Lijkt me een vrij complexe oplossing, dan gebruik ik liever de handmatige Select methode :), maar ik vind het wel jammer.

Ik vind het sowieso raar dat ze er voor gekozen hebben om het in de vorm van een DataRow[] terug te geven, een DataView was een stuk handiger geweest.

Any sufficiently advanced technology is equivalent to magic.


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Zyphrax schreef op 16 april 2004 @ 12:48:
Lijkt me een vrij complexe oplossing, dan gebruik ik liever de handmatige Select methode :), maar ik vind het wel jammer.
Complex is het niet. Je moet gewoon de interface implementeren, en in die methods geef je gewoon aan hoe er gesorteerd moet worden. Kijk eens even in de .NET help; daar staat wel een voorbeeldje uitgewerkt.

Je kan natuurlijk de rows die je terugkrijgt in een DataTable importen, en dan een DataView maken voor die DataTAble.

https://fgheysels.github.io/


  • Zyphrax
  • Registratie: September 2001
  • Laatst online: 04-04-2023
whoami schreef op 16 april 2004 @ 13:06:
Je kan natuurlijk de rows die je terugkrijgt in een DataTable importen, en dan een DataView maken voor die DataTAble.
Hoe gaat dat in zn werk en is het effecient of ben ik dan erg geheugen aan het misbruiken?

Any sufficiently advanced technology is equivalent to magic.


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Zyphrax schreef op 16 april 2004 @ 13:30:
[...]


Hoe gaat dat in zn werk en is het effecient of ben ik dan erg geheugen aan het misbruiken?
Tja, dat hangt ervan af hoeveel rows dat dan zijn. De methode met de IComparable interface is natuurlijk veel efficienter.
Met ImportRow wordt er een kopy gemaakt van de datarows, en worden ze in een nieuwe datatable geimporteerd. Je hebt dus 2x dezelfde gegevens in 't geheugen.
Lees eens iets in de .NET help over ImportRow, en DataView.

https://fgheysels.github.io/

Pagina: 1