Pregunta

Cada muestra de lo que he encontrado para hacer esto consiste en escribir una función fuera de OnLoad de mi página con el fin de hacer esto, pero estoy ansioso por ver si hay una manera más concisa de hacerlo. Tengo una etiqueta dentro de un HeaderTemplate, y sólo quiero para establecer el texto de la etiqueta en una cadena. I puede hacer lo siguiente si la etiqueta está fuera del repetidor:

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

¿Hay una manera sucinta de hacer esto?

¿Fue útil?

Solución

Pruebe lo siguiente dentro de de su plantilla de encabezado:

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

Otros consejos

Sería mejor si se ha utilizado el evento DataBinding.

ASPX marcado:

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

Código atrá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";
        }
    }
}

Hay que ir:)

No estoy 100% seguro de si está o no necesita esperar a que el repetidor de datos tiene unidos a él o no, pero esta es la forma en que accedería a un control dentro de ella la cabecera:

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

Probablemente debería romper que en varias líneas y comprobar para asegurarse de que no es un objeto a controles [0].

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top