Afficher/masquer ou creer dynamiquement des UserControles
Bonjour,
J'ai un repeater dont le role est d'aficher des messages. Ces messages peuvent etre de differents type : Administrateur, normal, etc...
Ce qui change essentiellement c'est la mise en page. J'ai donc creer un usercontrol par type de message.
Or je me pose une question, Vaut il mieux que je charge tous les types et qu'ensuite je n'affiche que celui qui m'interesse (option 1) ou alors que je charge dynamiquement mon user control pour ne prendre en compte que le bon.
Un peu de code pour expliquer tout ca :
option 1 :
Code:
1 2 3 4 5 6 7 8
|
<asp:Repeater runat=server ID=C_Rep_MessageList DataSource="<%# DataSource %>">
<ItemTemplate>
<MBox1:AdminMessage ID="C_WC_AdminMessage" runat="server" Visible="<%# ((Message)Container.DataItem).MessageType == Message.E_MessageType.AdminMessage %>" />
<mbox2:basicmessage id="C_WC_BasicMessage" runat="server" Visible="<%# ((Message)Container.DataItem).MessageType == Message.E_MessageType.normal %>"/>
<MBox3:FriendInvitation ID="C_WC_FriendInvitation" runat="server" Visible="<%# ((Message)Container.DataItem).MessageType == Message.E_MessageType.FriendInvitation %>" />
<MBox4:GreetingCard ID="C_WC_GreetingCard" runat="server" Visible="<%# ((Message)Container.DataItem).MessageType == Message.E_MessageType.greetingCard %>"/> </ItemTemplate>
</asp:Repeater> |
ou option 2:
Code:
1 2 3 4 5 6
| <asp:Repeater runat=server ID=C_Rep_MessageList DataSource="<%# DataSource %>" OnItemDataBound=C_Rep_MessageList_ItemDataBound>
<ItemTemplate>
<asp:PlaceHolder runat=server ID=C_PH_Message>
</asp:PlaceHolder>
</ItemTemplate>
</asp:Repeater> |
Code:
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
| protected void C_Rep_MessageList_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
Message m = null;
PlaceHolder ph = null;
m = (Message)e.Item.DataItem;
ph = (PlaceHolder)e.Item.FindControl("C_PH_Message");
if (m != null)
{
switch (m.MessageType)
{
case Message.E_MessageType.normal:
WebMessage uc = (WebMessage)LoadControl("MessageBox/BasicMessage.ascx");
uc.DataSource = m;
ph.Controls.Add(uc);
break;
case Message.E_MessageType.greetingCard:
break;
case Message.E_MessageType.FriendInvitation:
break;
case Message.E_MessageType.AdminMessage:
break;
default:
break;
}
}
} |
Quelle est la meilleure solution à votre avis? et pourquoi?
Merci d'avance de vous interesser aux petits problemes de ma vie ... :)