我发现的每个示例都包括在页面的 OnLoad 之外编写一个函数来执行此操作,但我很好奇是否有更简洁的方法来实现它。我在 HeaderTemplate 中有一个标签,我只想将标签的文本设置为字符串。如果标签在中继器之外,我可以执行以下操作:
Month.Text = Enum.GetName(typeof(Month), Convert.ToInt16(MonthList.SelectedValue));
有没有一种简洁的方法来做到这一点?
我发现的每个示例都包括在页面的 OnLoad 之外编写一个函数来执行此操作,但我很好奇是否有更简洁的方法来实现它。我在 HeaderTemplate 中有一个标签,我只想将标签的文本设置为字符串。如果标签在中继器之外,我可以执行以下操作:
Month.Text = Enum.GetName(typeof(Month), Convert.ToInt16(MonthList.SelectedValue));
有没有一种简洁的方法来做到这一点?
如果您确实使用 DataBinding 事件会更好。
ASPX 标记:
<asp:Repeater ID="repTest" runat="server">
<HeaderTemplate>
<asp:Label ID="lblHeader" runat="server" />
</HeaderTemplate>
</asp:Repeater>
后面的代码:
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";
}
}
}
你去吧:)
我不能 100% 确定您是否需要等待中继器将数据绑定到它,但这是您在其标题中访问控件的方式:
var myLabel = MyRepeater.Controls[0].Controls[0].FindControl("MyLabel") as Label;
myLabel.Text = "Hello World";
您可能应该将其分成多行并检查以确保在 Controls[0] 处有一个对象。
在标题模板中尝试以下操作:
<asp:Label ID="Month" runat="server" Text='<%# (Month)Convert.ToInt16(MonthList.SelectedValue) %>' />