【问题标题】:Setting MyLabel.Text in Repeater's HeaderTemplate在Repeater的HeaderTemplate中设置MyLabel.Text
【发布时间】:2009-05-20 22:28:02
【问题描述】:

我发现的每个示例都包含在页面的 OnLoad 之外编写一个函数来执行此操作,但我很好奇是否有更简洁的方法来实现它。我在 HeaderTemplate 中有一个标签,我只想将标签的文本设置为字符串。如果标签在中继器之外,我可以执行以下操作:

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

有没有简洁的方法来做到这一点?

【问题讨论】:

    标签: asp.net repeater web-controls


    【解决方案1】:

    如果你确实使用 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";
            }
        }
    }
    

    你去吧:)

    【讨论】:

    • 如何为我的目的编写事件处理程序比不写更好?
    • 将一堆 Conters[number] 链接在一起对我来说似乎很粗略。如果您重组页面,那将不得不改变。如果有的话,编写一个方法来搜索所有控件以找到你需要的那个,这样如果你用 div 或其他东西包装你的标记,它就不会中断。
    【解决方案2】:

    我不能 100% 确定您是否需要等待中继器将数据绑定到它,但这是您在其标题中访问控件的方式:

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

    您可能应该将其分成多行并检查以确保在 Controls[0] 处有一个对象。

    【讨论】:

    • 首先你需要MyRepeater.DataBind(),然后你可以访问它的控件。我想一个 Controls[0] 就足够了:)
    • 不知道你为什么被否决,这对我来说非常有效。
    • 我只需要在我的 DataBind 之后添加它。
    • 如果我不得不猜测,那是因为我使用的 Controls[0] 并不是最强大的做事方式。最好使用 FindControl,因为此方法依赖于保持相同顺序的控件,将来可能不会如此。
    • 明白了,直到现在我才完全理解它是如何工作的。
    【解决方案3】:

    在您的标头模板尝试以下操作:

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

    【讨论】:

    • 哇!投票有点苛刻 - 你可能只需要一个 .
    • 对此真的很抱歉,您在 cmets 中完全正确。我只需要导入。
    • 太棒了!感谢您重试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2019-07-17
    • 2011-07-12
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    相关资源
    最近更新 更多