Pergunta

Cada amostra que eu encontrei de fazer isso consiste em escrever uma função fora de minha página OnLoad, a fim de fazer isso, mas estou curioso para saber se há uma maneira mais concisa de ir sobre ele. Eu tenho um dentro da etiqueta de um HeaderTemplate, e eu só quero para definir o texto do rótulo para uma string. Eu posso fazer o seguinte, se a etiqueta está fora do repetidor:

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

Existe uma maneira sucinta de fazer isso?

Foi útil?

Solução

Tente o seguinte dentro seu modelo de cabeçalho:

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

Outras dicas

Seria melhor se você fez usar o evento DataBinding.

ASPX marcação:

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

código por trás:

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";
        }
    }
}

Lá vai você:)

Eu não estou 100% certo se ou não você precisa esperar para o repetidor de ter dados vinculados a ele ou não, mas isso é como você acessar um controle dentro dele do cabeçalho:

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

Você provavelmente deve quebrar isso em várias linhas e certifique-se de que existe um objeto em Controls [0].

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top