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

时间:2012-01-03 08:00:23

标签: c# asp.net .net-3.5

使用C#的

ASP.NET; .NET3.5

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

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

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>

如上所述,如何在Skill1的位置设置值“ java ”?

3 个答案:

答案 0 :(得分:3)

在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";
        }
    }

对于GridView。

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";
        }
    } 

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

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

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