Ik heb de volgende situatie:
Ik heb een Dao layer waarin Business objecten worden opgeslagen o.a. ook artikelen. Een artikel heeft standaard de volgende velden:
- Number (artikelnummer)
- Name (artikelomschrijving)
Nu is het zo dat sommige artikelen extra eigenschappen bevatten, bijvoorbeeld gewicht en kleur. Omdat deze eigenschappen variabel zijn worden deze in een aparte collectie opgeslagen.
Uiteindelijk ziet een Article object er als volgt uit:
Nu heb ik een testje in ASP.NET gemaakt om deze artikelinformatie in een grid weer te geven.
De kolommen gewicht en kleur zijn dynamisch dus deze zal ik at run-time moeten toevoegen:
Het toevegen van de kolommen is geen probleem, maar ik moet ook vertellen uit welk veld hij de data moet halen. ExtraFields[\"Gewicht\"] gaat natuurlijk niet werken maar dit is wel wat ik wil. Hoe vertel ik de DataGrid dat hij bij het DataBinden het veld Gewicht uit de subcollectie ExtraFields moet halen?
Ik heb een Dao layer waarin Business objecten worden opgeslagen o.a. ook artikelen. Een artikel heeft standaard de volgende velden:
- Number (artikelnummer)
- Name (artikelomschrijving)
Nu is het zo dat sommige artikelen extra eigenschappen bevatten, bijvoorbeeld gewicht en kleur. Omdat deze eigenschappen variabel zijn worden deze in een aparte collectie opgeslagen.
Uiteindelijk ziet een Article object er als volgt uit:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| public class Article { private string _Number; private string _Name; private NameValueCollection _ExtraFields; public Article() { _ExtraFields = new NameValueCollection(); // Fill some sample data for testing _ExtraFields.Add("Gewicht", "100 kg"); _ExtraFields.Add("Kleur", "groen"); } public NameValueCollection ExtraFields { get { return _ExtraFields; } } public String Number { get { return _Number; } set { _Number = value; } } public String Name { get { return _Name; } set { _Name = value; } } } |
Nu heb ik een testje in ASP.NET gemaakt om deze artikelinformatie in een grid weer te geven.
code:
1
2
3
4
5
6
| <asp:DataGrid id=DataGrid1 runat="server" autogeneratecolumns="false">
<columns>
<asp:BoundColumn HeaderText="Artikelnummer" DataField="Number" />
<asp:Boundcolumn Headertext="Naam" datafield="Name" />
</columns>
</asp:DataGrid> |
De kolommen gewicht en kleur zijn dynamisch dus deze zal ik at run-time moeten toevoegen:
C#:
1
2
3
4
5
6
7
8
9
10
| ArticleCollection items = catalog.Articles.SelectAll(); // Add column for weight BoundColumn col = new BoundColumn(); col.HeaderText = "Gewicht"; col.DataField = "ExtraFields[\"Gewicht\"]"; DataGrid1.Columns.Add(col); DataGrid1.DataSource = items; DataGrid1.DataBind(); |
Het toevegen van de kolommen is geen probleem, maar ik moet ook vertellen uit welk veld hij de data moet halen. ExtraFields[\"Gewicht\"] gaat natuurlijk niet werken maar dit is wel wat ik wil. Hoe vertel ik de DataGrid dat hij bij het DataBinden het veld Gewicht uit de subcollectie ExtraFields moet halen?
It’s nice to be important but it’s more important to be nice