如何为 HeaderTemplate 的标签控件设置文本值

本文关键字:控件 置文本 标签 HeaderTemplate | 更新日期: 2023-09-27 18:19:13

ASP.NET using C#; .net3.5

我想lblSkill1控件为此标签设置一些值。我无法访问 Eval 函数中的Skill1

我无法在lblSkill1控件的位置设置一些文本值来代替'<%# Eval("Skill1") %>'

HTML 标记

                   <HeaderTemplate>
                            <table cellpadding="0" cellspacing="0" style="padding-left: 0px; padding-right: 0px;
                                margin-left: 0px">
                                  <tr>
                                    <td>
                                        &#160;&#160;
                                    </td>
                                </tr>
                                <tr>
                                    <td align="center">
                                      <asp:Label ID="lblSkill1" runat="server" Text='<%# Eval("Skill1") %>'  />
                                    </td>
                                </tr>
                                </table>
                        </HeaderTemplate>

正如我上面所说,我如何设置一个值">java"来代替Skill1

如何为 HeaderTemplate 的标签控件设置文本值

在 ItemDataBound 事件中,您可以找到控件并在代码隐藏文件中设置值,我假设您使用了中继器。

protected void MyControl_ItemDataBound(Object Sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Header)
        {
            var label = (Label)e.Item.FindControl("lblSkill1");
            if (label != null)
                label.Text = "Text you want to set";
        }
    }

对于网格视图。

protected void MyControl_RowDataBound(Object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.Header)
        {
            var label = (Label)e.Row.FindControl("lblSkill1");
            if (label != null)
                label.Text = "Text you want to set";
        }
    } 
标题用于

整个转发器,而项目模板用于每一行。不能在标头模板中使用 EVAL 函数,因为 eval 函数用于当前数据项。

不能在标头模板中使用数据绑定表达式,因为当前没有可用的绑定上下文。对于项模板,数据源中的每个项都将充当数据项,因此绑定表达式可以工作,但对于标题模板则不然。

假设您的数据源中有 5 行 - 您希望Eval("Skill1")解析到什么 - 您希望它针对哪个项目/行解析?如果只想使用逻辑隐藏的代码动态设置文本,请使用 <%= 或使用ItemDataBound事件。例如

...
    <tr>
      <td align="center">
        <span><%= GetLabelText() %></span>         
      </td>
    </tr>
  </table>
</HeaderTemplate>

其中GetLableText将是类后面的代码中的受保护或公共方法,它将提供所需的值。

请注意,我使用了相关的 html 标记而不是服务器控件<%=因为它在服务器控件属性中不起作用。另一方面,如果您选择使用数据绑定事件,则必须使用用户服务器控制并使用FindControl调用找到它。