Dim obj as New Entiteiten()
obj.SelectAll()
Datagridview.DataSource = obj.items
Dim obj asNew Entiteiten()
obj.SelectAll()
Datagridview.DataSource= obj.items
Doe dan wordt m'n datagridview opgevuld met alle records uit de database, en alle kolommen komen overeen met de kolommen in de Class EntiteitenColumns.
Dus een beperkt aantal gegevens opvragen en deze weergeven in de datagridview.
Als ik die code uitvoer wordt er idd maar 1 regel uit de database gehaald. En zoals je kan zien in de Entiteiten Class bij de functie SelectById() wordt alleen het naam en omschrijving veld ingevuld.
Maar de andere kolommen Id, Gebruiker, Aangemaakt, Gewijzigd, Delete_Tabel, Delete_Cascade worden in de datagridview ook toegevoegd. Terwijl ik die absoluut niet nodig heb.
Ik zoek dus een manier om te bepalen welke properties uit mijn EntiteitenColumns moeten opgevuld worden en weergegeven in mijn datagridview.
Ik hoop dat je een beetje de structuur kan vinden van de applicatie.
Kan je niet de column namen in een array zetten en de keys zijn dan de tabel velden en dan kijken welke velden je in je query ophaalt en dmv die array haal je alleen die values uit de array op. Dit is het makkelijkste wat ik zo kan bedenken.
Er worden ook enkel maar de waardes opgehaald die ik definieer. Maar omdat het allemaal properties zijn van EntiteitenColumns worden toch al die columnheadings weergegeven. Ik zou die graag automatiseren en dus niet meer code in mijn frmMain krijgen.
Want je kan natuurlijk manueel alle kolommen verwijderen die je niet nodig hebt, maar zo wil ik het niet doen.
Maar kan je niet alles wat tussen SELECT en FROM staat en dan in je array gooien als keys, en wat je terug krijg gooi je in een methode die columnheaders maakt. Zo worden de headers aangemaakt als je de methode SelectById gebruikt.
Heb je in je DataGridView de kolommen vast gedefinieerd? Want als je gewoon een DataGridView plaatst zonder deze al kolommen te geven, krijgt hij maar het aantal kolommen afhankelijk van de DataSource.
Je zou eventueel ervoor kunnen zorgen dat je vanuit je Class de DataGridView kan aanroepen om ook eventueel andere properties nog toe te passen hierop.
De kolommen zijn niet vast gedefinieerd. Het is door de items as List(Of EntiteitenColumns) dat hij de kolomheader meekrijgt. Op een of andere manier zou ik moeten kunnen zeggen dat bepaalde properties niet getoond mogen worden. Als ik <Browsable(False)>_ voor m'n property zet dan wordt deze niet getoond in de datagrid view. Maar dit is een property die je niet kan instellen. Die False heb ik al geprobeerd te vervangen door een variabele, maar die kan enkel een Const zijn.
Misschien een beetje omslachtig en niet de mooiste code dan, maar kan je dan niet ofwel:
- kolomeigenschap Visible = False zetten
- DataGridView.Columns.Remove(teVerwijderenKolom)
En anders werken met een DataSet en die dan toewijzen aan de DataGridView.
Omdat ik nu via een datareader werk wat opzich sneller is dan een dataset. Ook als ik met een dataset werk moet ik toch op voorhand gaan definiëren welke kolommen ik wil zien als dit het geval is zou ik dat graag met mijn List proberen, alleen weet ik gewoon niet hoe.