1

SQL からの情報の行を一覧表示するグリッドビューがあります。後期列が 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;
                }
            }
        }

したがって、ハイパーリンクではなくラベルで機能する理由を知る必要があります。ハイパーリンクの解決策も必要です。

4

2 に答える 2

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");
    }
}
于 2014-09-25T15:42:06.977 に答える
-1
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        HyperLink myHyperLink = e.Row.FindControl("myHyperLinkID") as HyperLink;
    }
}

これはうまくいくはずです。

于 2014-09-25T15:00:33.217 に答える