2012-06-25 1 views
1

J'ai un lien hypertexte dans le champ modèle. Je veux activer et désactiver le lien hypertexte en fonction de sa valeur. Disons que si Id est "ABC" Je veux désactiver le lien hypertexte. J'ai essayé le code ci-dessous mais cela n'a pas fonctionné pour moi.Comment activer et désactiver le lien hypertexte dans gridview?

Enabled='<%# Convert.ToString(Eval("Id"))!= "ABC" ? true: false %>' 

J'ai essayé ce qui suit dans le code derrière:

protected void gridResult_RowDataBound(object sender, GridViewRowEventArgs e) { 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     HyperLink status = (HyperLink)e.Row.Cells[2].Controls[0]; 
     if (status != null && status.Text == "ABC") { 
      status.Enabled = false; 
     } 
    } 
} 

Mais il revient null chaque fois.

<asp:TemplateField HeaderText="Id"> 
         <ItemTemplate> 
          <% if (WebApp.Common.Auth.Admin()) { %> 
           <a href="../../Edit/Default.aspx?<%= WebApp.Edit.Default.P_ID %>=<%# DataBinder.Eval(Container.DataItem, "Id") %>&amp;r=<%= buildPostBackPortion() %>"><%# DataBinder.Eval(Container.DataItem, "Id") %> Enabled='<%# Convert.ToString(Eval("Id"))!= "ABC" ? true: false %>' 
</a> 
          <% } else { %> 
           <%# DataBinder.Eval(Container.DataItem, "Id") %> 
          <% } %> 
         </ItemTemplate> 
         </asp:TemplateField> 
+1

montrez votre templatefield s'il vous plaît ... – naveen

+0

Naveen, j'ai mis à jour ma question avec templatefiled. S'il vous plaît, jetez un oeil. – Ranjith

Répondre

2

Quand je dois faire quelque chose que vous décrivez-je utiliser les éléments suivants:

ASPX:

<asp:TemplateField HeaderStyle-CssClass="cell-action" ItemStyle-CssClass="cell-action"> 
    <ItemTemplate> 
     <asp:HyperLink ID="viewHyperLink" runat="server" Text="View" /> 
     <asp:Label ID="messageLabel" runat="server" /> 
    </ItemTemplate> 
</asp:TemplateField> 

C#:

protected void reportedIssuesGridView_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) 
{ 
    RowDataType row; 
    HyperLink viewHyperLink; 
    Label messageLabel; 

    if (e.Row.RowType == DataControlRowType.DataRow && e.Row.DataItem is RowDataType) { 
     row = (RowDataType)e.Row.DataItem; 
     viewHyperLink = (HyperLink)e.Row.FindControl("viewHyperLink"); //Gets the HyperLink 
     messageLabel = (Label)e.Row.FindControl("messageLabel"); //Gets the Label 
     if (row.Id != "ABC") 
     { 
      viewHyperLink.Visible = true; 
      viewHyperLink.NavigateUrl = "~/Edit/Default.aspx?P_ID" + row.Id; 

      messageLabel.Visible = false; 

     } 
     else 
     { 
      viewHyperLink.Visible = true; 

      messageLabel.Visible = true; 
      messageLabel.Text = row.Id; 
     } 
    } 
} 

RowDataType est le nom du type des données de ligne.

Si vous avez besoin d'aide supplémentaire ou si vous avez d'autres questions, n'hésitez pas à demander. Si cela résout votre problème, veuillez accepter.
FYI: un taux d'acceptation de 25% est vraiment mauvais. Vous devriez essayer de le faire en acceptant les réponses.

Mise à jour: Code modifié pour utiliser messageLabel.

+0

Ai-je besoin d'ajouter une référence pour utiliser RowDataType? – Ranjith

+0

@Ranjith 'RowDataType' doit être remplacé par le type de données que vous liez à GridView. Par exemple, si vous liez un tableau de chaînes à GridView, alors 'RowDataType' sera remplacé par' string'. – Trisped

Questions connexes