2010-05-30 2 views
4

J'ai un GridView existant qui contient le champ "nom du partenaire". Il est triable par nom de partenaire.
Maintenant, je dois changer le champ Nom du partenaire et, dans certaines conditions, le rendre cliquable et alerte() quelque chose.ASP.Net: Ajout du côté client onClick à un HyperlinkField dans GridView

Le code existant est:

<asp:GridView ID="gridViewAdjustments" runat="server" AutoGenerateColumns="false" AllowSorting="True" OnSorting="gridView_Sorting" OnRowDataBound="OnRowDataBoundAdjustments" EnableViewState="true"> 
     <asp:BoundField DataField="PartnerName" HeaderText="Name" SortExpression="PartnerName"/> 

J'ai ajouté la colonne:

<asp:hyperlinkfield datatextfield="PartnerName" SortExpression="PartnerName" headertext="Name" ItemStyle-CssClass="text2"/> 

qui me permet de contrôler le CSS et le tri. Cependant, je ne peux pas trouver comment y ajouter une fonction javascript côté client.
Je trouve que l'ajout:

<asp:TemplateField HeaderText="Edit">          
<ItemTemplate> 
     <a id="lnk" runat="server">Edit</a>  

me permettent d'accéder à ".lnk" par identifiant et ajouter à ses attributs. Cependant, je perds la capacité de tri.

Quelle est la bonne solution dans ce cas?
Merci.

Répondre

7

La solution que j'ai trouvé à l'aide asp: TemplateField cette façon, sans perdre la capacité de tri et d'utiliser le DataTextField en utilisant Eval:

<asp:TemplateField HeaderText="Name" SortExpression="PartnerName"> 
<ItemTemplate> 
     <a onclick="javascript:alert('ok')" href="http://<%#Eval("PartnerName")%>"><%#Eval("PartnerName")%></a> 
</ItemTemplate></asp:TemplateField> 
5

Gérez l'événement RowDataBound. Dans le gestionnaire d'événements ...

private void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    e.Row.Cells[0].Controls[0].Attributes.Add("onclick", "alert(‘An alert’);") 
} 

Vous pourriez avoir besoin de changer Controls[0] à Controls[1].

+0

L'erreur lors de la définition d'un ID est: « attribut Id est invalide pour les tags qui ne sont pas hérités de Control ". – Nir

+0

Désolé, voir la mise à jour. –

+0

merci - mais encore vous ne pouvez pas donner à l'asp: hyperlinkfield un ID ... Je vois votre point cependant. – Nir

0

jQuery. Simple one-liners et unobtrusive:

$('A.text2').click(function() { 
    alert('ok'); 
}); 
3

Le ClientId généré semble tout à fait différent de ID, mais elle se termine toujours avec ID. Nous ne pouvons pas utiliser ID en Javascript ou Jquery, afin que nous puissions faire comme ci-dessous:

<asp:TemplateField SortExpression="partnername" HeaderText="Partner"> 
    <ItemTemplate> 
     <asp:HyperLink ID="kkx" Text='<%#Eval("partnername")%>' NavigateUrl="# runat="server"> 
     </asp:HyperLink> 
    </ItemTemplate> 
    </asp:TemplateField> 

Puis, en Jquery nous pouvons faire:

$(function() { 
     $("#GridView1 a[id$=kkx]").bind('click', function() { 
      alert('hi'); 
      }); 
     }); 
Questions connexes