Hello,
Below is some code to demonstrate my problem :
I use a grid with 3 pages, each containing only one row for simplicity.. The grid contains an hyperlink column (another is visible here only for verification).
The first page is displayed by default and then we can observe a correct URL to the passage of the mouse over it.
Changing page calls PageMethods to get data client side, and oddly the url is lost... However, verification column displays the correct URL.
Thank you in advance for your help.
TestHyperLinkColumn.aspx :
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestHyperLinkColumn.aspx.cs" Inherits="Test.TestHyperLinkColumn" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div> <telerik:RadCodeBlock runat="server" ID="RadScriptBlock1"> <script type="text/javascript"> //<![CDATA[ function RadGrid1_Command(sender, args) { args.set_cancel(true); $find("<%= RadAjaxLoadingPanel1.ClientID %>").show("<%= RadGrid1.ClientID %>"); var currentPageIndex = sender.get_masterTableView().get_currentPageIndex(); PageMethods.GetData(currentPageIndex + 1, updateGrid); } function updateGrid(result) { //Bind Grid var tableView = $find("<%= RadGrid1.ClientID %>").get_masterTableView(); var $ = $telerik.$; result = $.parseJSON(result); tableView.set_dataSource(result); tableView.dataBind(); $find("<%= RadAjaxLoadingPanel1.ClientID %>").hide("<%= RadGrid1.ClientID %>"); } //]]> </script> </telerik:RadCodeBlock> <telerik:RadScriptManager runat="server" EnableCdn="true" ID="RadScriptManager1" EnablePageMethods="true" /> <telerik:RadAjaxLoadingPanel runat="server" ID="RadAjaxLoadingPanel1"> </telerik:RadAjaxLoadingPanel> <div> <telerik:RadGrid runat="server" ID="RadGrid1" AllowFilteringByColumn="true" FilterType="CheckList" AllowPaging="true" PagerStyle-AlwaysVisible="true" AllowSorting="true"> <MasterTableView AutoGenerateColumns="False" PageSize="1" AllowFilteringByColumn="false"> <Columns> <telerik:GridHyperLinkColumn DataTextField="Link" HeaderText="Link" Target="_blank" DataType="System.String" DataNavigateUrlFields = "LinkURL"> </telerik:GridHyperLinkColumn> <telerik:GridBoundColumn DataField="LinkURL" HeaderText="LinkURL" DataType="System.String" Visible="true"> </telerik:GridBoundColumn> </Columns> </MasterTableView> <PagerStyle AlwaysVisible="true" Mode="NumericPages" /> <ClientSettings EnableRowHoverStyle="true"> <ClientEvents OnCommand="RadGrid1_Command" /> </ClientSettings> </telerik:RadGrid> </div> </div> </form></body></html>
TestHyperLinkColumn.aspx.cs :
using System;using System.Collections.Generic;using System.Data;using System.Web.Services;using System.Web.UI;namespace Test{ public partial class TestHyperLinkColumn : Page { protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { RadScriptManager1.EnablePageMethods = true; DataTable data = GetDataTable(1, true); RadGrid1.MasterTableView.DataSource = data; RadGrid1.DataBind(); } } private static string ConvertDataTabletoString(System.Data.DataTable dt) { System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>(); Dictionary<string, object> row; foreach (System.Data.DataRow dr in dt.Rows) { row = new Dictionary<string, object>(); foreach (System.Data.DataColumn col in dt.Columns) { row.Add(col.ColumnName, dr[col]); } rows.Add(row); } return serializer.Serialize(rows); } private static DataTable GetDataTable(int pageIndex, bool first = false) { DataTable dt = new DataTable(); dt.Columns.Add("Link", typeof(string)); dt.Columns.Add("LinkURL", typeof(string)); DataRow dr = dt.NewRow(); dr[0] = string.Format("Link{0}", pageIndex); dr[1] = string.Format("http://www.link{0}.com", pageIndex); dt.Rows.Add(dr); pageIndex++; if (first) { //Adds 2 rows only for pager because data not used (loaded from PageMethods) dr = dt.NewRow(); dr[0] = ""; dr[1] = ""; dt.Rows.Add(dr); pageIndex++; dr = dt.NewRow(); dr[0] = ""; dr[1] = ""; dt.Rows.Add(dr); } return dt; } [WebMethod] public static string GetData(int PageIndex) { DataTable dt = GetDataTable(PageIndex); string result = ConvertDataTabletoString(dt); return result; } }}