Impostazione MyLabel.Text in HeaderTemplate del ripetitore
-
23-08-2019 - |
Domanda
Ogni campione che ho trovato di fare questo prevede la scrittura di una funzione al di fuori di OnLoad della mia pagina, al fine di fare questo, ma io sono curioso di sapere se c'è un modo più conciso per andare su di esso. Ho un Etichetta all'interno di un HeaderTemplate, e voglio solo per impostare il testo dell'etichetta in una stringa. Posso fare quanto segue se l'etichetta è al di fuori del ripetitore:
Month.Text = Enum.GetName(typeof(Month), Convert.ToInt16(MonthList.SelectedValue));
C'è un modo succinto per fare questo?
Soluzione
Prova il seguente all'interno il tuo modello di intestazione:
<asp:Label ID="Month" runat="server" Text='<%# (Month)Convert.ToInt16(MonthList.SelectedValue) %>' />
Altri suggerimenti
Sarebbe meglio se è stata utilizzata l'evento DataBinding.
ASPX markup:
<asp:Repeater ID="repTest" runat="server">
<HeaderTemplate>
<asp:Label ID="lblHeader" runat="server" />
</HeaderTemplate>
</asp:Repeater>
Codice dietro:
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";
}
}
}
Ci si va:)
Io non sono sicuro al 100% anche se non è necessario attendere che il ripetitore di avere dati associati ad esso o no, ma questo è come si dovrebbe accedere a un controllo all'interno del suo intestazione:
var myLabel = MyRepeater.Controls[0].Controls[0].FindControl("MyLabel") as Label;
myLabel.Text = "Hello World";
Probabilmente si dovrebbe rompere questo in più righe e controllare per assicurarsi che ci sia un oggetto a controlli [0].