2009-05-20 5 views
3

Chaque exemple que j'ai trouvé de faire cela consiste à écrire une fonction en dehors de la page OnLoad de ma page pour cela, mais je suis curieux de savoir s'il y a une façon plus concise de le faire . J'ai une étiquette à l'intérieur d'un HeaderTemplate, et je veux juste mettre le texte de l'étiquette à une chaîne. Je peux faire ce qui suit si l'étiquette est en dehors du répéteur:Définir MyLabel.Text dans HeaderTemplate de Repeater

Month.Text = Enum.GetName(typeof(Month), Convert.ToInt16(MonthList.SelectedValue)); 

Y at-il une façon succincte de le faire?

Répondre

2

Essayez le suivant à l'intérieur votre modèle d'en-tête:

<asp:Label ID="Month" runat="server" Text='<%# (Month)Convert.ToInt16(MonthList.SelectedValue) %>' /> 
+0

Je reçois une erreur indiquant que mon type d'énumération est introuvable. –

+1

Wow! Bit dur avec la downvoting - vous avez probablement juste besoin d'un <% @ Import Namespace = "Xyz"%>. –

+0

Vraiment désolé, vous avez eu raison dans les commentaires. J'avais juste besoin d'importer. –

4

Je ne suis pas sûr à 100% si vous devez attendre que le répéteur d'avoir des données qui lui sont liés ou non, mais comment vous accéderiez un contrôle au sein de son en-tête:

var myLabel = MyRepeater.Controls[0].Controls[0].FindControl("MyLabel") as Label; 
myLabel.Text = "Hello World"; 

Vous devriez probablement casser cela en plusieurs lignes et vérifier pour s'assurer qu'il y a un objet chez Controls [0].

+0

d'abord vous devez MyRepeater.DataBind(), alors vous pouvez accéder à ses contrôles. Je suppose qu'un Contrôles [0] est assez :) – balint

+0

Aucune idée pourquoi vous avez été rejeté, cela a fonctionné parfaitement pour moi. –

+0

Je devais juste l'ajouter après mon DataBind. –

9

Il serait préférable que vous utilisiez l'événement DataBinding.

balisage ASPX:

<asp:Repeater ID="repTest" runat="server"> 
    <HeaderTemplate> 
     <asp:Label ID="lblHeader" runat="server" /> 
    </HeaderTemplate> 
</asp:Repeater> 

code derrière:

protected void Page_Load(object sender, EventArgs e) 
{ 
    repTest.ItemDataBound += new RepeaterItemEventHandler(repTest_ItemDataBound); 

    int[] testData = { 1, 2, 3, 4, 5, 6, 7, 8 }; 
    repTest.DataSource = testData; 
    repTest.DataBind(); 
} 

void repTest_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Header) 
    { 
     Label lblHeader = e.Item.FindControl("lblHeader") as Label; 
     if (lblHeader != null) 
     { 
      lblHeader.Text = "Something"; 
     } 
    } 
} 

Il vous allez :)

+0

Comment écrire un gestionnaire d'événement pour mon but mieux que pas? –

+0

Il y a quelque chose à propos de l'enchaînement d'un groupe de Conters [nombre] qui me semble assez sommaire. Cela devrait être changé si vous restructuriez la page. Si quoi que ce soit, écrivez une méthode qui effectue une recherche dans tous les contrôles pour trouver celui dont vous avez besoin afin qu'il ne se casse pas si vous avez enveloppé votre balisage avec un div ou autre chose. – Gromer

+0

Bon conseil, merci beaucoup. –

Questions connexes