Hoi allen,
ik zit even met een klein vraagstukje hoe ik iets het beste kan aanpakken.
Ik heb 2 typen (Article en SubArticle) en ik heb een listview.
Deze listview wordt gevuld met Articles OF met Subarticles. De typename en dataObjectTypeName van de datasource wordt dynamisch bepaald aan de hand van een parameter. Dus als de parameter waarde x heeft, wordt de typename 'Article' en anders 'SubArticle'.
Nu loop ik alleen in het ItemDataBound event tegen een probleem aan:
In het event vul ik de labels (die in de ItemTemplates staan) van de listview, met enkele properties van het dataItem. Bijvoorbeeld:
Probleem is echter, dat dit fout gaat als de items van het type 'SubArticle' zijn. Dan zou ik e.Item.DataItem als 'SubArticle' moeten casten. Alleen dan krijg ik dus allemaal dubbele code.
Hoe kan ik dit het handigste refactoren?
--edit--
Om het overal te moeten casten tegen te gaan, heb ik eerst een variabele 'article' gedeclareerd die ik vul met het dataItem. Deze regel roep ik aan het begin van het event aan, maar hiermee blijft het probleem bestaan natuurlijk.
ik zit even met een klein vraagstukje hoe ik iets het beste kan aanpakken.
Ik heb 2 typen (Article en SubArticle) en ik heb een listview.
Deze listview wordt gevuld met Articles OF met Subarticles. De typename en dataObjectTypeName van de datasource wordt dynamisch bepaald aan de hand van een parameter. Dus als de parameter waarde x heeft, wordt de typename 'Article' en anders 'SubArticle'.
Nu loop ik alleen in het ItemDataBound event tegen een probleem aan:
In het event vul ik de labels (die in de ItemTemplates staan) van de listview, met enkele properties van het dataItem. Bijvoorbeeld:
C#:
1
2
| lblActive.Text = string.Format("{0}", ((Article)e.Item.DataItem).Active ? "Ja" : "Nee"); |
Probleem is echter, dat dit fout gaat als de items van het type 'SubArticle' zijn. Dan zou ik e.Item.DataItem als 'SubArticle' moeten casten. Alleen dan krijg ik dus allemaal dubbele code.
C#:
1
2
3
4
5
6
| //if is article lblActive.Text = string.Format("{0}", ((Article)e.Item.DataItem).Active ? "Ja" : "Nee"); //else if is subarticle lblActive.Text = string.Format("{0}", ((SubArticle)e.Item.DataItem).Active ? "Ja" : "Nee"); |
Hoe kan ik dit het handigste refactoren?
--edit--
Om het overal te moeten casten tegen te gaan, heb ik eerst een variabele 'article' gedeclareerd die ik vul met het dataItem. Deze regel roep ik aan het begin van het event aan, maar hiermee blijft het probleem bestaan natuurlijk.
C#:
1
2
3
4
| var article = (Article)e.Item.DataItem; lblActive.Text = string.Format("{0}", article.Active ? "Ja" : "Nee"); |
[ Voor 13% gewijzigd door PdeBie op 04-06-2013 11:26 ]