我有一个gridview,它列出了SQL中的信息行。如果late列设置为1,则应以红色显示该行的文本。这样可行,但超链接文本不会显示为红色。所以我试图a)更改超链接元素的前景色或b)将一个类应用于元素。当我尝试检索超链接时,它没有得到它。当我检索标签时,它似乎工作正常。
ASP
<asp:TemplateField HeaderText="Project">
<ItemTemplate>
<a id="hlProject" href="VpnDetails.aspx?Project=<%# Eval("id") %>"><%# Eval("project") %></a>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Last Update">
<ItemTemplate>
<asp:Label ID="lblLastUpdate" runat="server" Text='<%#Eval("diff") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
C#
protected void gvLastIp_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//Adds the tooltip to the last update label
Label lblLastUpdate = e.Row.FindControl("lblLastUpdate") as Label;
DateTime activeSince = Convert.ToDateTime(DataBinder.Eval(e.Row.DataItem, "begindate"));
DateTime lastupdate = Convert.ToDateTime(DataBinder.Eval(e.Row.DataItem, "lastupdate"));
lblLastUpdate.ToolTip = "Active Since " + activeSince.ToString("MMMM d yyyy HH:mm") + " - Last Update " + lastupdate.ToString("MMMM d yyyy HH:mm");
if (Convert.ToString(DataBinder.Eval(e.Row.DataItem, "late")) == "1")
{//if the row is late it should be red
e.Row.Font.Bold = true;
e.Row.ForeColor = System.Drawing.Color.Red;
HyperLink hlProject = new HyperLink();
try
{
hlProject = (HyperLink)e.Row.FindControl("hlProject");
hlProject.Attributes.Add("class", "late");
hlProject.ForeColor = System.Drawing.Color.Red;
}
catch (Exception e1)
{
lblError.Text = e1.Message;
}
}
}
所以我需要知道它为什么适用于标签而不是超链接。我还需要一个超链接的解决方案。
答案 0 :(得分:2)
您无法在服务器上找到超链接,因为它不是服务器端控件。您需要添加runat="server"
才能做到这一点。请注意href
的更改,以使其生效。
<a id="hlProject" runat="server" href='<%# Eval("id", "VpnDetails.aspx?Project={0}") %>'><%# Eval("project") %></a>
然后,您可以通过在行内找到它来获取服务器端。
using System.Web.UI.HtmlControls;
protected void gvLastIp_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
HtmlAnchor hlProject = (HtmlAnchor)e.Row.FindControl("hlProject");
}
}
或者,您可以创建和使用ASP.NET超链接控件。这在服务器端更灵活/有用。
<asp:HyperLink ID="hlProject" runat="server"
NavigateUrl='<%# Eval("id", "VpnDetails.aspx?Project={0}") %>'
Text='<%# Eval("project") %>'>
</asp:HyperLink>
protected void gvLastIp_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
HyperLink hlProject = (HyperLink)e.Row.FindControl("hlProject");
}
}
答案 1 :(得分:-1)
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
HyperLink myHyperLink = e.Row.FindControl("myHyperLinkID") as HyperLink;
}
}
这应该有用。