ASP.Net: Добавление клиентской части onClick в HyperlinkField в GridView - PullRequest
4 голосов
/ 30 мая 2010

У меня есть существующий GridView, который содержит поле «имя партнера». Сортируется по имени партнера.
Теперь мне нужно изменить поле «Имя партнера» и в некоторых условиях сделать его активным и активным ().

Существующий код:

  <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"/>

Я добавил столбец:

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

, что позволяет мне контролировать CSS и сортировать. Однако я не могу найти, как добавить к нему функцию javascript на стороне клиента.
Я обнаружил, что добавление:

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

разрешить мне доступ к "lnk" по id и добавить к его атрибутам. Однако я теряю способность сортировки.

Какое в этом случае правильное решение?
Спасибо.

Ответы [ 4 ]

7 голосов
/ 31 мая 2010

Решением, которое я нашел, было использование asp: TemplateField таким образом, без потери способности Сортировки и использования поля данных с использованием Eval:

 <asp:TemplateField HeaderText="Name" SortExpression="PartnerName">
<ItemTemplate>
        <a onclick="javascript:alert('ok')" href="http://<%#Eval("PartnerName")%>"><%#Eval("PartnerName")%></a>
</ItemTemplate></asp:TemplateField>
5 голосов
/ 30 мая 2010

Обработка события RowDataBound. В обработчике событий ...

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

Возможно, вам придется изменить Controls[0] на Controls[1].

3 голосов
/ 31 мая 2010

Сгенерированный ClientId выглядит совсем не так, как ID, но всегда заканчивается идентификатором. Мы не можем использовать ID в Javascript или Jquery, поэтому мы можем сделать следующее:

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

Тогда в Jquery мы можем сделать:

$(function() {
         $("#GridView1 a[id$=kkx]").bind('click', function() {
             alert('hi');
          });
      });
0 голосов
/ 31 мая 2010

JQuery. Простые однострочные и незаметные :

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