2009-06-05 7 views
0

J'ai un gridview (DXperience gridview) où je voudrais afficher si l'utilisateur a déjà cliqué sur un lien dans cette rangée. Le lien sur chaque ligne envoie l'utilisateur à une page où plus de détails sont affichés sur l'élément. Pour symboliser cela, j'ai pensé par exemple à rendre l'arrière-plan des lignes visitées dans une couleur différente.Gridview et articles consultés

Ma question est quelle est la manière la plus simple et la plus efficace de le faire?

Mon Idée: Comme il n'y a pas de système de connexion que j'ai pensé à enregistrer les ID des éléments dans un cookie séparés par une virgule, et lors du rendu des lignes je regarde dans le cookie pour voir si cet élément est déjà vu.

Je suis préoccupé par la lenteur de la grille. J'affiche habituellement quelques milliers de lignes et si l'utilisateur a cliqué sur peut-être 40 éléments, il faudra un certain temps pour parcourir 40 éléments sur chaque ligne, pour vérifier si elle est déjà vue. Est-ce une préoccupation valable, et si oui, comment pourrais-je l'optimiser?

Répondre

0

Il y a plusieurs façons de le faire. L'utilisation du cookie est une manière valide, bien qu'elle ne permette probablement pas une utilisation propre de: visited.

Cette personne a changé l'adresse de liaison, elle correspond donc à un ID unique. link Ils avaient un problème avec la coloration dans IE7; Je suppose que c'est parce qu'ils devaient utiliser une ancre (#).

Mise à jour:

En fonction de votre situation, vous pouvez essayer passer une liste d'ID de ligne à un littéral:

var visitedSites = <asp:Literal />; 

passe dans un tableau JS et vous pouvez parcourir et régler la aligner les couleurs de cette façon. Les frais généraux ne sont pas particulièrement élevés, du moins jusqu'à ce que vous ayez dépassé quelques centaines de liens visités.

Vous pouvez également le faire côté serveur, lors de la liaison de ligne. En fonction de la charge du serveur par rapport au client, cela peut être la meilleure option.

function gridLinks_OnRowDataBound (...) { 
    if (visited.Contains(e.Row.DataItem["field"])) 
    //Set color 
} 

(je travaille de la mémoire et ne pas utiliser C# au travail, mais vous avez l'idée générale.)

+0

Ma ligne contient plusieurs colonnes, et je voudrais faire l'arrière-plan de la ligne complète et pas seulement la colonne qui relie à l'élément, une couleur distint, si elle est visitée. – Dofs

+0

Une chose que vous pourriez faire est de parcourir les rangées et de définir la couleur de la ligne par la couleur du lien. Mais il y a de bonnes chances que la lecture de la couleur visitée ne fonctionne pas toujours, parce que c'est un trou de sécurité (http://www.azarask.in/blog/post/socialhistoryjs/) – Chris

+0

Je voudrais aller remplir un champ caché avec des données JS sur les lignes visitées. Architecturalement parlant, c'est une option plus simple. – Chris