Toon posts:

[C#]Datagrid

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

Verwijderd

Topicstarter
Is het mogelijk om binnen een datagrid te beslissen welke kolommen je wilt tonen als deze bijvoorbeeld opgevuld is door middel van een arraylist.

Of moet ik hiervoor telkens een nieuwe arraylist maken, met enkel de kolommen die ik wil tonen en deze dan weer koppelen aan de datagrid? Maar hierdoor zou ik dan belangrijke informatie kunnen verliezen die ik nodig heb voor andere functionaliteiten.

Verder heb ik ook nog het probleem dat ik 2 tabellen wil koppelen:
een tabel personeelsleden met funtieID en een tabel functies, uit mijn DBlaag krijg ik dus voor deze twee tabellen via 2 arraylists. Hoe kan ik daartussen een relatie leggen om deze dan te tonen in een datagrid.

Moet ik op basis van deze arraylijsten één datatable maken? of 2 datatables en die dan in een dataset droppen? Indien ik dit zou doen, zijn mijn arraylijsten dan niet wat overbodig?

Graag had ik geweten hoe jullie zulke problemen oplossen.

Verwijderd

Welke taal gebruik je?

Verwijderd

Topicstarter
Ik gebruik C#,maar ik ben dat dus vergeten in de titel te zetten :s

[ Voor 4% gewijzigd door Verwijderd op 28-04-2003 11:09 ]


Verwijderd

Dan kan het met ColumnHeaders en ColumnStyle... Die dingen hebben dacht ikof een Visible property, of een Width property (die je op 0 kan zetten), of alletwee :)

/Edit: Waarom werk je met ArrayLists, en niet met DataTables of DataSets? In een DataSet kan je m.b.v. Relations de gewenste relatie aanmaken tussen de twee tabellen.
Dus je kan ook eerst de ArrayLists converteren naar DataTables, die toevoegen aan een DataSet, en daar de relaties op leggen.

[ Voor 49% gewijzigd door Verwijderd op 28-04-2003 11:13 ]


  • oZy
  • Registratie: Juli 2001
  • Laatst online: 21-08 15:17

oZy

In de datagrid properties window kan je ook je columns kiezen.

Waarom doe je dat koppelen van die kolommen trouwens niet in je SQL query ipv de verschillende array's aan elkaar te binden :?

Verwijderd

Topicstarter
Verwijderd schreef op 28 april 2003 @ 11:11:
Waarom werk je met ArrayLists, en niet met DataTables of DataSets? In een DataSet kan je m.b.v. Relations de gewenste relatie aanmaken tussen de twee tabellen.
Dus je kan ook eerst de ArrayLists converteren naar DataTables, die toevoegen aan een DataSet, en daar de relaties op leggen.
Voorlopig is mijn applicatie zo gestructureerd. Ik heb ervoor gekozen om met domeinobjecten te werken, dus een klasse "Personeelslid" die alle velden bevat van een personeelslid uit de db, een klasse "Functie" die een functie voorstelt enz.

Het voordeel hiervan - vind ik - is dat je de validatie van domeinobjecten binnen de klasse zelf kan uitvoeren. Zo kan ik bv. valideren vooraleer een personeelslid up te daten of te saven of het personeelslid wel geldig is. Alle validatie van het object zelf gebeurt dus binnen dit object. Bij het gebruik van datasets weet ik niet direct hoe dit te implementeren, dus heb ik maar voor domeinobjecten gekozen ... tot hiertoe nog geen problemen dus.

In de database laag maak ik dan ook gebruik van deze domeinobjecten. Een method InsertPersoneelslid aanvaardt een Personeelslid object en voegt deze toe. Een method GetPersoneelslid geeft een Personeelslid terug. Een method GetAllePersoneelsleden een arraylist van Personeelsleden.

In de transactielaag terug hetzelfde: gebruik van domeinobjecten. Een transactie InsertPersoneelslid controleert eerst of het personeelslid geldig is (validatie op object niveau/klasseninvarianten) en controleert daarna de business rules (er bestaat bv. nog geen personeelslid met hetzelfde email). Tot hiertoe nog steeds geen problemen door het werken met domeinobjecten.

Al het bovenstaande werkte redelijk goed, tot ik begonnen ben met het maken van de GUI. Blijkbaar is het in C# niet makkelijk om mijn objecten te koppelen aan componenten zoals een datagrid. (in tegenstelling tot bv models in Java)

Nu werd voorgesteld om gebruik te maken van een DataTable, maar kan ik dan nog gebruik maken van mijn domeinobjecten? Voorlopig gebeurt de communicatie tussen de verschillende lagen dmv domeinobjecten en niet door datasets/datatables. Behoudt ik dan de huidige manier van werken en converteer ik pas in de GUI een arraylist naar een datatable? Of geef ik reeds vanuit de db laag een datatable terug voor het gemak? Dan ben ik wel validatie op object niveau kwijt :/

Ik zou de manier van werken met domeinobjecten niet willen veranderen, deze werkt namelijk al redelijk goed, zolang er geen GUi aan te pas komt ...

Verwijderd

Ik loop tegen precies hetzelde aan als jou, GreywolF.

Op dit moment verstuur ik allemaal Custom Objects via Remoting. Het benaderen van deze objects gebeurt via een Interface. Dit werkt allemaal prima, zolang je maar niet me DataBinding aan de slag gaat, want op de een of andere manier wordt er dan geen data getoond.

Verwijderd

Verwijderd schreef op 28 April 2003 @ 11:47:
Ik zou de manier van werken met domeinobjecten niet willen veranderen, deze werkt namelijk al redelijk goed, [b]zolang er geen GUi aan te pas komt ...[b]
Handig :D ;)

Maar goed, over domein objecten is op dit forum al zeer veel discussie (/oorlog ;)) gevoerd, en volgens mij heeft iedere oplossing z'n pro's en contra's :).

Maar je kan toch aan je BL methodes toevoegen die DataTables teruggeven... niet echt netjes, maar het werkt wel :).
DataBinding aan objecten anders dan DataTables zijn in .NET nogal problematisch... het kan wel, maar is niet echt aan te raden gezien de problemen die het oplevert...

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:17
Verwijderd schreef op 28 April 2003 @ 11:47:
[...]

In de database laag maak ik dan ook gebruik van deze domeinobjecten. Een method InsertPersoneelslid aanvaardt een Personeelslid object en voegt deze toe. Een method GetPersoneelslid geeft een Personeelslid terug. Een method GetAllePersoneelsleden een arraylist van Personeelsleden.
Is dat niet beter omgekeerd?
Dat je database-laag niks weet van je domein-objecten, maar omgekeerd: dat de domain objects een call doen naar een method van een DAL-class?
Al het bovenstaande werkte redelijk goed, tot ik begonnen ben met het maken van de GUI. Blijkbaar is het in C# niet makkelijk om mijn objecten te koppelen aan componenten zoals een datagrid. (in tegenstelling tot bv models in Java)
Een datagrid geeft informatie weer van verschillende objecten/records.
Als die objecten dus in een ArrayList zitten, dan kan je toch gerust die ArrayList gebruiken als datasource lijkt me.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:17
Verwijderd schreef op 28 april 2003 @ 11:57:
DataBinding aan objecten anders dan DataTables zijn in .NET nogal problematisch... het kan wel, maar is niet echt aan te raden gezien de problemen die het oplevert...
Hoezo dan?

Je kan toch perfect bv het volgende doen:

code:
1
TextBox1.DataBindings.Add ("Text", MyObject, "MemberName");

https://fgheysels.github.io/


Verwijderd

whoami schreef op 28 April 2003 @ 21:31:
Hoezo dan?

Je kan toch perfect bv het volgende doen:

code:
1
TextBox1.DataBindings.Add ("Text", MyObject, "MemberName");
't kan wel, maar bij een project waar ik aan meegeholpen heb, hebben we enorm veel trucks moeten uit halen om het probleemloos te laten werken... Ik weet niet meer precies waar het fout ging, ik dacht bij date/time's en/of NULL values, maar het heeft in ieder geval heel veel ellende opgeleverd, en we hebben toen maar een eigen binding geneuzel bedacht...

[ Voor 4% gewijzigd door Verwijderd op 28-04-2003 22:07 ]


Verwijderd

Topicstarter
whoami schreef op 28 April 2003 @ 21:29:
[...]
Is dat niet beter omgekeerd?
Dat je database-laag niks weet van je domein-objecten, maar omgekeerd: dat de domain objects een call doen naar een method van een DAL-class?
Voorlopig werk ik zo: In de GUI stel ik een personeelslid object op en wordt een functie InsertPersoneelslid(Personeelslid p) opgeroepen uit de transactie laag. Binnen de transactie klasse zelf wordt dan de validatie gedaan waarna een functie InsertPersoneelslid(Personeelslid p) uit de database laag wordt opgeroepen. Met de gegevens uit het personeeslid object kan ik dan het sql statement opstellen.

Wat stel jij dan voor? Ik ben altijd bereid uit mijn fouten te leren ;)
whoami schreef op 28 April 2003 @ 21:29:[...]
Een datagrid geeft informatie weer van verschillende objecten/records.
Als die objecten dus in een ArrayList zitten, dan kan je toch gerust die ArrayList gebruiken als datasource lijkt me.
Juist, het binden van een arraylist als datasource aan een datagrid geeft op het eerste zicht niet veel problemen. Om personeelsleden voor te stellen in een grid volstaat het om een arraylist van personeelslid objecten mee te geven. Maar van zodra ik bv. koppelingen wil leggen tussen het functieId van een personeelslid en de functieNaam van de functie, dan voldoen arraylist niet meer. Wil ik kolommen niet weergeven, dan gaat dit ook niet zonder problemen. Ik probeer voorlopig de arraylist om te zetten naar een datatable, maar dat lijkt me niet direct de meest elegante oplossing ...

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 22-08 10:45

mulder

ik spuug op het trottoir

Met een TemplateColumn zou je adhv je functieId ter plekke de functieNaam kunnen ophalen.

oogjes open, snaveltjes dicht


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:17
Verwijderd schreef op 29 April 2003 @ 14:24:
[...]

Voorlopig werk ik zo: In de GUI stel ik een personeelslid object op en wordt een functie InsertPersoneelslid(Personeelslid p) opgeroepen uit de transactie laag. Binnen de transactie klasse zelf wordt dan de validatie gedaan waarna een functie InsertPersoneelslid(Personeelslid p) uit de database laag wordt opgeroepen. Met de gegevens uit het personeeslid object kan ik dan het sql statement opstellen.

Wat stel jij dan voor? Ik ben altijd bereid uit mijn fouten te leren ;)
Ik vind het meestal beter dat de presentatielaag niets kent van de datalaag, maw, er worden geen calls gedaan naar methods van DAL objects vanuit de presentatielaag.
Daarom zou je wellicht beter een 'Save' method oid hebben in je BL class die op zijn beurt een method gaat gaan aanroepen van een DAL class die de object(en) gaat gaan wegschrijven.
Juist, het binden van een arraylist als datasource aan een datagrid geeft op het eerste zicht niet veel problemen. Om personeelsleden voor te stellen in een grid volstaat het om een arraylist van personeelslid objecten mee te geven. Maar van zodra ik bv. koppelingen wil leggen tussen het functieId van een personeelslid en de functieNaam van de functie, dan voldoen arraylist niet meer. Wil ik kolommen niet weergeven, dan gaat dit ook niet zonder problemen. Ik probeer voorlopig de arraylist om te zetten naar een datatable, maar dat lijkt me niet direct de meest elegante oplossing ...
Is het niet beter dat je je Business Logic classes functioneel gaat gaan samenstellen, en dus niet noodzakelijk een 1 op 1 afspiegeling van je tabellen in je database laat zijn?
Bv, een class PersoneelsLid, maar in die class hou je ook bij wat de functie is van dat personeelslid (eventueel door een member variable in die class PersoneelsLid die van het type Function is ofzo).

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 29 April 2003 @ 19:35:
[...]

Ik vind het meestal beter dat de presentatielaag niets kent van de datalaag, maw, er worden geen calls gedaan naar methods van DAL objects vanuit de presentatielaag.
Daarom zou je wellicht beter een 'Save' method oid hebben in je BL class die op zijn beurt een method gaat gaan aanroepen van een DAL class die de object(en) gaat gaan wegschrijven.
Misschien was alles niet duidelijk uitgelegd, maar dit gebeurt ook zo.
whoami schreef op 29 April 2003 @ 19:35:
[...]

Is het niet beter dat je je Business Logic classes functioneel gaat gaan samenstellen, en dus niet noodzakelijk een 1 op 1 afspiegeling van je tabellen in je database laat zijn?
Bv, een class PersoneelsLid, maar in die class hou je ook bij wat de functie is van dat personeelslid (eventueel door een member variable in die class PersoneelsLid die van het type Function is ofzo).
Wel, daar had ik ook eerst aan gedacht, maar je kan toch oneindig ver gaan zo? Houdt je dan bij een Order de Orderregels bij alsook het Product bij een Orderregel als de Leverancier bij het Product als ...

Dan nog iets, stel dat het adres van de Leverancier wijzigt, mag je dan al je Order objecten gaan updaten?

Anyway, ik heb voorlopig het werken met Arraylists opgegeven en ben overgeschakeld op DataTables. Vanuit de onderste lagen krijg ik nu DataTables terug ipv ArrayLists.

Om dan terug te komen op het probleem om in een DataGrid bij een Personeelslid ook de Functie naam te tonen: nu zit ik met 2 datatables en 1 relatie, maar hoe toon ik in godsnaam de functienaam er in een extra kolom bij? Nu krijg ik steeds van die irriterende plusjes :?

Er was een voorstel gedaan om evt met één DataTable te werken, die dus Personeelslid gegevens en Functie gegevens bevat, maar ook hier: wat indien de functie naam wijzigt?

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:17
Verwijderd schreef op 04 mei 2003 @ 10:33:
[...]


Misschien was alles niet duidelijk uitgelegd, maar dit gebeurt ook zo.
Uit je eerste uitleg verstond ik dat de save functie van een DAL object bv een BL object als parameter meenam.
Dat je dus, in je presentatie-laag bv het volgende schreef:
code:
1
PersonDAL.Save (aPersonObject);
Wel, daar had ik ook eerst aan gedacht, maar je kan toch oneindig ver gaan zo? Houdt je dan bij een Order de Orderregels bij alsook het Product bij een Orderregel als de Leverancier bij het Product als ...
Je kan oneindig ver gaan, maar je kan er ook voor zorgen dat de informatie die je niet nodig hebt, nog niet ophaalt uit de databank. (Lazy Load).
Je haalt dus bv enkel de productinformatie op, als je die ook echt nodig hebt/moet tonen.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ondertussen heb ik ook iets gevonden om data uit 2 DataTables in 1 grid voor te stellen.

http://support.microsoft....spx?scid=kb;en-us;Q319076

Verwijderd

Topicstarter
Ik heb deze middag wat info gezocht over DataSets, DataTables, DataViews en CurrencyManagers, maar ik heb nog wat onduidelijkheden over oa de state van de data/rows.

Vooraleer ik verderdoe aan mijn project heb ik beslist eerst een simpel programma te schrijven dat gewoon gegevens uit een tabel kan wijzigen, toevoegen en verwijderen. Daarnaast wil ik ook gewoon een datagrid waarin ik kan navigeren via Vorig/Volgende knoppen.

Voorlopig heb ik dit:
- ik haal alle gegevens uit een tabel binnen in een DataTable en stop deze DataTable in een DataSet (later kan ik dan hier extra DataTables en DataRelation toevoegen)
- dan koppel ik deze DataSet aan een DataGrid via
code:
1
dataGrid.setDataBindings(ds, "DataTableNaam")

- op het form staan er nog wat extra TextBox controls die ook gekoppeld zijn aan deze DataSet via
code:
1
 textBox1.DataBindings.Add("Text", ds, "DataTableNaam.Id")

- als laatste heb ik nog een CurrencyManager voorzien
code:
1
 myCurrencyManager = (CurrencyManager)this.BindingContext[ds, "DataTableNaam"]


Als ik dus navigeer in de datagrid of via een knop Vorig/Volgende, verspringt de inhoud van de textboxen ook mee. Prima. (Achter de knoppen vorige/volgende zit code die de Position van de CurrencyManager aanpast.)

Maar nu wil ik bv. via de textboxen het huidige record in de grid wijzigen. Als ik dan wil verspringen van record (via bv klikken in de datagrid of op vorig/volgende), moet eerst gecontroleerd worden of ik al dan niet wijzigingen heb uitgevoerd via de TextBoxes. Hoe controleer ik dit het beste?

Ik dacht aan één van volgende eigenschappen om te controleren of de gebruiker al dan niet wijzigingen heeft aangebracht via de TextBoxes, maar geen van allen is echt sluitend ...

code:
1
2
3
4
((DataRowView)myCurrencyManager.Current).IsEdit
OF ((DataRowView)myCurrencyManager.Current).RowVersion
OF ((DataRowView)myCurrencyManager.Current).Row.RowState
OF ds.HasChanges();


Niemand een voorbeeld app die bovenstaande functionaliteiten bevat zodat ik deze eens grondig kan bestuderen?

Verwijderd

Topicstarter
Negeer bovenstaande post maar ...

Ik heb de afgelopen dagen zitten verder zoeken, applicatie moeten aanpassen, etc ... dus de situatie is ondertussen reeds gewijzigd, maar toch zit ik nog met enkele major problemen:

Hier is een vereenvoudigde voorstelling van de huidige applicatie (deze keer met orders/klanten). Op DB niveau heb ik een tabel Klanten en een tabel Orders. Op form1 wil ik een overzicht van alle orders in een datagrid. Op form2 zet ik dan de klantgegevens gekoppeld aan textboxen zodat ik deze kan wijzigen. Op form3 staan terug alle ordergegevens, maar deze keer ook gekoppeld aan textboxen, daarnaast staat er ook een combobox gevuld met alle klanten zodat ik kan opgeven welke klant bij dit order hoort.

Als ik nu op form2 een klant zijn gegevens wijzig, dan zou het logisch zijn dat deze wijzigingen daarna ook voorkomen in de combobox klanten op het andere form, form3. Dit kan ik verwezenlijken door ofwel, telkens als ik form3 open/selecteer, alle klanten opnieuw uit de db te halen, wat slecht is. Ofwel kies ik ervoor om te werken met een soort cache binnen de winforms applicatie. Als ik op form2 een klant wijzig, dat de wijzigingen doorgevoerd worden in de cache - een dataset in feite - zodanig dat als form3 geladen wordt, dat de wijzigingen ook hier gebeurd zijn, omdat dit form gebaseerd is op dezelfde cache.

Nu tot hiertoe nog niet echt een probleem. Wijzig ik iets in form2, dan update ik de cache (alsook de DB natuurlijk) en ga ik naar form3 dan zie ik daar de wijzigingen.

Maar dan over naar form1, de datagrid met orders. Wat ik wil is het volgende: een lijst van alle orders samen met een kolom KLANTNAAM. De cache - dataset - bevat dus een datatable orders, alsook een datatable klanten, met een relatie tussen beide tables.

Als ik als DataSource voor de datagrid de ganse DataSet (cache) zet, dan kan ik wel aan de klantnaam komen, maar dan staat die onder de + in een klantrij als childrecord, dus niet als extra kolom bij de orderrij.

Als ik als DataSource voor de datagrid een dataview neem, die gebaseerd is op de datatable orders, dan kan ik de klantnaam niet tonen, aangezien een dataview op één datatable is gebaseerd.

Nu is het aanmaken van een nieuwe datatable met alle attributen van orders, alsook een extra kolom klantnaam ook niet direct een optie - denk ik - want dan gaat mijn cache verhaal niet meer op. Als ik een nieuwe datatable aanmaak, dan kan ik perfect de klantnaam bij het order afbeelden, maar eens op form2 bv. de klantnaam wijzigt (lees, dataset/cache wordt gewijzigd), dan wijzigt form1 niet, aangezien deze terug over een afzonderlijke datatable beschikt ...

Ik hoop dat mijn probleem wat duidelijk is. Enerzijds voel ik me genoodzaakt om de data ergens globaal bij te houden in een dataset/datatables zodat ik alle forms hierop kan baseren, en een wijziging hierin ook zorgt voor het wijzigen van andere forms. Dit gebeurt via een dataview op een datatable uit de cache.

Anderzijds ben ik beperkt door het gebruik van dataviews, aangezien deze op een datatable zijn gebaseerd en ik in feite een extra "lookup" kolom wil toevoegen aan een form. Het evt. bijhouden van die extra kolom in de datatable is ook geen optie. (ivm duplicatie, updates, datatable/cache is dan afhankelijk van de voorstelling die ik wens, ...)

Ik heb de applicatie al laten werken met één globale dataset, en eens met een "lookup" kolom, maar de combinatie van beide is me tot vandaag nog niet gelukt. Bestaat hiervoor een oplossing, of is dit een beperking die niet te omzeilen valt, of moet ik mijn applicatie drastich herstructureren om toch tot een oplossing te komen?

[ Voor 7% gewijzigd door Verwijderd op 11-05-2003 00:06 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:17
Verwijderd schreef op 10 mei 2003 @ 23:59:
Als ik nu op form2 een klant zijn gegevens wijzig, dan zou het logisch zijn dat deze wijzigingen daarna ook voorkomen in de combobox klanten op het andere form, form3. Dit kan ik verwezenlijken door ofwel, telkens als ik form3 open/selecteer, alle klanten opnieuw uit de db te halen, wat slecht is.
Waarom is dat slecht? Op die manier weet je wel zeker dat je altijd de recentste informatie ophaalt.
Wat als er meerdere gebruikers die applicatie gebruiken, en jij altijd met je lokale dataset blijft werken? Stel dat jij klant 1 wijzigt, en gebruiker B wijzigt klant 2, dan ga jij die wijzigingen die gebruiker B gedaan heeft niet te zien krijgen als je de gegevens niet uit de DB haalt.

[ Voor 25% gewijzigd door whoami op 11-05-2003 10:45 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ok, voor die combox kan ik er nog inkomen dat je alle klanten opnieuw ophaalt ... maar op het scherm met de datagrid orders en kolom klantnaam, haal ik dan ook telkens opnieuw alle data op? De applicatie is immers een MDI applicatie, ik kan makkelijk tussen forms schakelen, dus telkens als een form de focus krijgt zou ik moeten alle data terug ophalen uit de db om te kijken of er niets gewijzigd is?

Dit lijkt me inderdaad de makkelijkste oplossing (buiten dat ik dan wel de positie van het huidig geselecteerde record moet bijhouden, evt sorteer volgorde en filter die actief is) maar dan heb ik ten allen tijde up to date info. Alleen leek het me wat "overhead" om telkens alles opnieuw uit de db op te halen ... Daarom heb misschien slecht gekozen woord "slecht" :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:17
Verwijderd schreef op 11 May 2003 @ 11:09:
Ok, voor die combox kan ik er nog inkomen dat je alle klanten opnieuw ophaalt ... maar op het scherm met de datagrid orders en kolom klantnaam, haal ik dan ook telkens opnieuw alle data op? De applicatie is immers een MDI applicatie, ik kan makkelijk tussen forms schakelen, dus telkens als een form de focus krijgt zou ik moeten alle data terug ophalen uit de db om te kijken of er niets gewijzigd is?
Je kan toch, als je een wijziging doorvoert in een form, de andere form ervan op de hoogte stellen, en dan zorgen dat hij zijn datagrid refreshed ofzo.

Je kan een delegate aanmaken in de form waar je je gegevens laat aanpassen, en als de gebruiker op een knop klikt om die gegevens door te voeren, dan kan je die delegate ook laten uitvoeren. Die delegate bevat dan een method die een actie onderneemt om de gegevens op die form up te daten.

Zie hier bv een voorbeeldje van delegates om form-communicatie te verwezenlijken.
[rml]whoami in "[ VB.NET] waardes van een andere form?"[/rml]

PS, zit jij op het VHTI?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Thx voor de link, ik zal die es bestuderen.

Idd, ik zit op het VHTI ... IBS'er?

[ Voor 7% gewijzigd door Verwijderd op 11-05-2003 11:52 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:17
Verwijderd schreef op 11 May 2003 @ 11:51:
Idd, ik zit op het VHTI ... IBS'er?
Nee, geen IBS'er. :+
M'n broer wel.

https://fgheysels.github.io/

Pagina: 1