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>
  
</td>
</tr>
<tr>
<td align="center">
<asp:Label ID="lblSkill1" runat="server" Text='<%# Eval("Skill1") %>' />
</td>
</tr>
</table>
</HeaderTemplate>
如上所述,如何在Skill1
的位置设置值“ java ”?
答案 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
调用找到它。